///// positioning functions
function getPosleft(elm) {
	var left = elm.offsetLeft;
	while((elm = elm.offsetParent) != null) {
		left += elm.offsetLeft;
	}
	return left;
}

function getPostop(elm) {
	var top = elm.offsetTop;
	while((elm = elm.offsetParent) != null) {
		top += elm.offsetTop;
	}
	return top;
}


function getPageOffsetLeft(menuDiv) {
var x;
x = menuDiv.offsetLeft;
  if (menuDiv.offsetParent != null) {
    x += getPageOffsetLeft(menuDiv.offsetParent);
   }
return x;
}


function getPageOffsetTop(menuDiv) {
var y;
y = menuDiv.offsetTop;
  if (menuDiv.offsetParent != null)
    y += getPageOffsetTop(menuDiv.offsetParent);
return y;
}

// Safari can't load css via ajax
// It must be attached to the head tag
// takes the id of your stylesheet in th ajax file
function injectCSS(css_string) {
	var ss = document.createElement('style');
	var def = css_string;
	ss.setAttribute("type", "text/css");
	if (ss.styleSheet) {   // IE
		ss.styleSheet.cssText = def;
	} else {                // the world
		var tn = document.createTextNode(def);
		ss.appendChild(tn);
	}
	var head = document.getElementsByTagName('head')[0];
	head.appendChild(ss);
}


function positionPage(newDiv, where) {
	if ( where ) {
		var offScreenLeft = ( window.innerWidth - (where.offsetWidth + getPageOffsetLeft(where) + 100) ) < 0;
		var offScreenTop = ( window.innerHeight - (where.offsetHeight + getPageOffsetTop(where) + 100) ) < 0;
		if ( offScreenLeft ) {
			leftpos	= getPageOffsetLeft(where) - where.offsetWidth;
		} else {
			leftpos	= getPageOffsetLeft(where);
		}
		if ( offScreenTop ) {
			toppos	= getPageOffsetTop(where);
		} else {
			toppos	= getPageOffsetTop(where);
		}
		
		newDiv.style.width = (where.offsetWidth-15) + "px";
		newDiv.style.top = 	toppos  + "px";
		newDiv.style.left =  leftpos  + "px";
		
	} else {
		newDiv.style.top = (scrollHeight+100) + "px";
		newDiv.style.left = (scrollWidth/2) + (width/2) + "px";
	}
	
	newDiv.style.visibility = "visible";
}

function createAjaxWindow(url, params, title, draggable, where) {
	var contentDiv = $('contentDiv');
	if ( contentDiv ) {
		document.body.removeChild(contentDiv);
	}
	var newDiv = document.createElement("div");
	var scrollHeight = document.body.scrollTop;
	var scrollWidth = document.body.scrollLeft;
	newDiv.style.zIndex = 500;
	newDiv.style.position = "absolute";
	newDiv.style.top = "0px";
	newDiv.style.visibility = "hidden";
	newDiv.id = "contentDiv";
	newDiv.className = "ajaxwindow";
	makeTitleBar(newDiv, title);
	makeContentArea(newDiv);
	document.body.appendChild(newDiv);
	hideSelectors(where);
	if ( draggable ) {
		new Draggable('contentDiv', {
			scroll: window,
			revert:false,
			starteffect: '',
			endeffect: '',
			handle:'titlebar'
		});
	}
	new Ajax.Updater('ajaxDiv', url, {
	method: 'get',
	parameters: params,
	evalScripts: true,
	asynchronous: true,
	onComplete: function(request) {
		if ($('ajaxContent') ) {
			$('contentDiv').style.width = $('ajaxContent').offsetWidth + "px";
			$('contentDiv').style.height = $('ajaxContent').offsetHeight + "px";
			$('ajaxDiv').style.width = $('ajaxContent').offsetWidth + "px";
			$('ajaxDiv').style.height = $('ajaxContent').offsetHeight + "px";
			$('titlebar').style.width = ($('ajaxContent').offsetWidth + 23) + "px";
			$('titleTable').style.width = ($('ajaxContent').offsetWidth + 23) + "px";
		}
		positionPage($('contentDiv'), where);
	}
});
}

function hideSelectors(where) {
	var selectors = where.getElementsByTagName("select");
	for ( var i=0; i < selectors.length; i++ ) {
		var selector = selectors[i];
		selector.style.visibility = "hidden";
	}
}

function showSelectors(where) {
	var selectors = where.getElementsByTagName("select");
	for ( var i=0; i < selectors.length; i++ ) {
		var selector = selectors[i];
		selector.style.visibility = "visible";
	}
}

function makeTitleBar(newDiv, title) {
	handleDiv = document.createElement("div");
	handleDiv.id = "titlebar";
	handleDiv.className = "titlebar";
	var table = document.createElement("table");
	table.id = "titleTable";
	table.style.width = "100%";
	table.cellSpacing = "0";
	table.cellPadding = "0";
	table.border = "0";
	var tbody = document.createElement("tbody");
	var tr = document.createElement("tr");
	var td = document.createElement("td");
	td.className = "mvp_page_title";
	td.style.verticalAlign = "top";
	td.style.textAlign = "left";
	td.innerHTML = title;
	tr.appendChild(td);
	var td = document.createElement("td");
	td.className = "mvp_page_title";
	td.style.verticalAlign = "top";
	td.style.textAlign = "right";
	td.style.width = "20px";
	td.innerHTML = "X";
	td.target = 'contentDiv';
	td.style.cursor = "pointer";
	td.onclick = ajaxCancel;
	tr.appendChild(td);
	tbody.appendChild(tr);
	table.appendChild(tbody);
	handleDiv.appendChild(table);
	newDiv.appendChild(handleDiv);
}

function makeContentArea(newDiv) {
	var contentDiv = document.createElement("div");
	contentDiv.id = "ajaxDiv";
	contentDiv.style.height = newDiv.style.height;
	newDiv.appendChild(contentDiv);
}

function ajaxGet(url, params, target) {
    if ( params ) {
		params = params.replace(/&amp;/g,"&");
    }
    new Ajax.Updater(target, url, {
    	method: 'get',
		parameters: params,
		evalScripts: true,
		asynchronous: true
	});
}

function ajaxPost(url, form, target) {
	var contentDiv;
	if ( target ) {
		contentDiv = target;
	} else {
		contentDiv = 'ajaxDiv';
	}
	var params = Form.serialize(form);
	new Ajax.Updater(contentDiv, url, {
    	method: 'post',
		postBody: params,
		evalScripts: true,
		asynchronous: true
    });
} 

function ajaxCancel(event, target) {
	var contentDiv;
	if ( target ) {
		contentDiv = $(target);
	} else {
		contentDiv = $('contentDiv');
	}
	if ( contentDiv ) {
		document.body.removeChild(contentDiv);
	} 
}

var validator;
function initValidator(form) {
	validator = new Validation(form, {onSubmit: false});
	Validation.add('validate-us-date-format', 'Please use this date format: mm/dd/yyyy. For example 03/17/2006 for the 17th of March, 2006.', function(v) {
				if(Validation.get('IsEmpty').test(v)) return true;
				var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
				if(!regex.test(v)) return false;
				var d = new Date(v.replace(regex, '$1/$2/$3'));
				return ( parseInt(RegExp.$1, 10) == (1+d.getMonth()) ) && 
							(parseInt(RegExp.$2, 10) == d.getDate()) && 
							(parseInt(RegExp.$3, 10) == d.getFullYear() );
			});
}

function checkForm(url, form) {
	var result = validator.validate();
	if ( result ) {
		ajaxPost(url, form);
	}
}


function resetPassword() {
var valid = Validation.get('required').test($('email').value);
if ( valid ) {
	new Ajax.Request( '/login/reset_link', {
		method: 'get',
		parameters: 'email=' + $('email').value,
		onComplete: function(request) {
			alert("An email has been sent to " + $('email').value + " with instructions for resetting your password.");
		}
	}); 
} else {
	alert("Please enter an email address.");
}
}