/**
 * @author john
 */

function AddJS(mysrc) {
	var sz = document.createElement("script");
	sz.src = mysrc;
	sz.type = "text/javascript";
	document.getElementsByTagName("head")[0].appendChild(sz);
}

var evaluator = function(o) {
	try {
		eval(o.responseText);
	} catch(err) {
		RM.logError(err, 0);
	}
}

function formToUrl(formid) {
	var form = document.getElementById(formid);
	
	var url = "";
	try {
		for(var i = 0; i < form.elements.length; i++) {
			switch(form.elements[i].type.toLowerCase()) {
				case "button":
				case "reset": break;
				case "radio":
				case "checkbox":
					if(form.elements[i].checked)
						url += form.elements[i].name + "=" + escape(form.elements[i].value) + "&";
					break;
				case "select-one":
					url += form.elements[i].name + "=" + escape(form.elements[i].value) + "&";
					break;
				case "select-multiple":
					for(var v = 0; v < elements[i].options.length; v++) {
						if(form.elements[i].options[v].selected)
							form.elements[i].name + "=" + escape(form.elements[i].options[v].value) + "&";
					}
					break;
				default:
					url += form.elements[i].name + "=" + escape(form.elements[i].value) + "&";
					break;
			}
		}
		
		url = url.substr(0, (url.length - 1));
		
		return url;
	} catch(e) {
		alert("Error parsing form " + formid + " - " + e);
	}
}

function URLEncode(plaintext) {
	if(isNumber(plaintext)) {
		plaintext = plaintext.toString();
	}
	
	var SAFECHARS = "0123456789" +
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";
	var HEX = "0123456789ABCDEF";
	
	var encoded = "";
	for(var i = 0; i < plaintext.length; i++) {
		var ch = plaintext.charAt(i);
		if(ch == " ") {
			encoded += "+";
		} else if(SAFECHARS.indexOf(ch) != -1) {
			encoded += ch;
		} else {
			var charCode = ch.charCodeAt(0);
			if(charCode > 255) {
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}
	
	return encoded;
}

function requestAsyncSearch(obj, params, retryCallBack, token) {
	var requestUrl = baseURL + obj.searchScript + "?objPath=" + obj.id + "&" + params;
	var sToken = token;
	RM.lastReq = requestUrl;
	var handleSuccess = function(o) {
		try {
			if(sToken == RM.searchToken) {
				eval(o.responseText);
			}
		} catch(err) {
			RM.logError(err, 0);
			obj.setStatus("connectionFailure");
		}
	}
	
	var callBack = {
		success: handleSuccess,
		failure: retryCallBack
	}
	
	var request = YAHOO.util.Connect.asyncRequest('GET', requestUrl, callBack);
}

function trunc(str, length) {
	if(str.length >= length) {
		str = str.substring(0, length) + "...";
	}
	return str;
}

function cachGeo(point, location) {
	var url = baseURL + "cachetrack.php?l=" + URLEncode(location) + "&lat=" + point.y + "&lon=" + point.x;
	YAHOO.util.Connect.asyncRequest('GET', url, {success: nothing, failure: nothing});
}

function secondstotime(secs) {
	var hours;
	var minutes;
	var sec;
	var time;
	hours = Math.floor(secs/3600);
	minutes = Math.floot((secs % 3600)/60);
	
	sec = (secs % 60);
	
	if(sec < 10) { sec = "0" + sec; }
	if(minutes < 10) { minutes = "0" + minutes; }
	
	if(hours > 0) {
		time = hours + ":" + minutes + ":" + sec;
	} else if(minutes > 0) {
		time = minutes + ":" + sec;
	} else {
		time = sec + " Seconds";
	}
	
	return time;
}

function selectValue(s1,val) {
	for(a = 0; a < s1.options.length; a++) {
		if(s1.options[a].value == val) {
			s1.selectedIndex = a;
			return null;
		}
	}
}

function checkZip() {
	if(document.getElementById("l").value == '[ZIP]') {
		document.getElementById("l").value='';
		document.getElementById("l").focus();
		return false;
	}
	return true;
}

function hideModal() {
	document.getElementById("modal").style.display = "none";
	document.getElementById("modalContent").style.display = "none";
	document.getElementById("modalContent").innerHTML = "";
	hideDialog();
}

function showModal() {
	document.getElementById("modal").style.display = "block";
	document.getElementById("modalContent").style.display = "block";
}

function setModalContent(content) {
	document.getElementById("modalContent").innerHTML = content;
}

function showChangePassword() {
	showModalFrame(300, 180, "Change Password", baseURL + "content/forms/changePassword.php");
	return false;
}

function showLogin(msg) {
	var m;
	if(!msg) {
		m = '';
	} else {
		m = "?msg=" + URLEncode(msg);
	}
	showModalFrame(300, 180, "Logging In", baseURL + "content/forms/login.php" + m);
	return false;
}

function showItineraryModal() {
	showModalFrame(510, 300, "Start Your Itinerary", baseURL + "content/forms/startIt.php");
	return false;
}

function showItinerarySelection(setId, itemId) {
	var m;
	
	m = "?setId=" + URLEncode(setId) + "&itemId=" + URLEncode(itemId);

	showModalFrame(300, 180, "Select Itinerary", baseURL + "content/forms/selectItinerary.php" + m);
	return false;
}

function showModalFrame(width, height, label, url) {
	var frameHTML = '<iframe style="width: ' + width + 'px; height: ' + height + 'px;" src="' + url + '"';
	frameHTML += 'frameborder="0"></iframe></td></tr></table>';
	
	showDialog(label, frameHTML);
	showModal();
}

function showDialog(title, content, autoclose) {
	document.getElementById("popheaderContent").innerHTML = title;
	document.getElementById("popcontent").innerHTML = content;
	changeOpac(100, "dialog");
	var d = document.getElementById("dialog");
	d.style.top = "150px";
	d.style.display = "block";
}

function hideDialog() {
	document.getElementById("dialog").style.display = "none";
}

function objToParams(obj) {
	var output = '';
	
	for(var i in obj) {
		if(!isObject(obj[i]) && !isArray(obj[i])) {
			output += "&" + i + "=" + URLEncode(obj[i]);
		}
	}
	return output;
}

function prepareActions(o) {
	var ab = document.getElementById("actionBar");
	var lb = document.getElementById("mapLegend");
	var map = document.getElementById("map");
	
	if(o == "map") {
		ab.style.display = 'none';
		lb.style.display = '';
		map.style.display = 'block';
	} else {
		var actions = '<table cellpadding="0" cellspacing="0"><tr>';
		
		if(o.parent) {
			for(var a in o.parent.actions) {
				var tabtitle = trunc(a + ": " + o.parent.properties.title, 23).replace("'", "\\'");
				actions += '<td><a href="#" onclick="TM.doAction(\'' + a + '\', \'' + o.id + '\', \'' + tabtitle + '\')"><span><em>' + o.parent.parent.actions[a] + "</em></span></a></td>";
			}
		}
		
		actions += '</tr></table>';
		lb.style.display = 'none';
		map.style.display = 'none';
		ab.innerHTML = actions;
		ab.style.display = '';
	}
	
	delete actions;
	delete map;
	delete ab;
	delete lb;
}

function isNumber(o) {
	return (typeof(o) == "number");
}

function isObject(o) {
	return (typeof(o) == "object");
}

function isArray(o) {
	return (isObject(o) && (o.length) && (!isString(o)));
}

function isFunction(o) {
	return (typeof(o) == "function");
}

function isString(o) {
	return (typeof(o) == "string");
}

function changeOpac(opacity, id) {
	var object = document.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
}

function notifyError(errtxt) {
	var postdata = "errordump=" + URLEncode(errtxt);
	YAHOO.util.Connect.asyncRequest('POST', baseURL + "errorlog.php", {success: nothing, failure: nothing}, postdata);
}

function setFormParams(params) {
	for(var n in params) {
		setElementValue(n, params[n]);
	}
}

function cloneObjectForTab(iObj) {
	var prop = new Object;
	var p = new Object;
	
	for(var name in iObj.properties) {
		prop[name] = iObj.properties[name];
	}
	p.type = iObj.parent.type;
	p.actions = iObj.parent.actions;
	
	var obj = new Object;
	obj.properties = prop;
	obj.parent = p;
	
	return obj;
}

function greetUser() {
	RM.lastReq = baseURL + "geocode.php?action=greet";
	YAHOO.util.Connect.asyncRequest('POST', baseURL + "geocode.php?action=greet", {success: evaluator, failure: nothing});
}

function showDomError(domObj, error) {
	var left = findX(domObj) - 20;
	var top = findY(domObj) + 15;
	
	changeOpac(100, "domErrorDialog");
	
	document.getElementById("domErrorDialogContent").innerHTML = error;
	
	var dialogContainer = document.getElementById("domErrorDialog");
	
	dialogContainer.style.top = top + "px";
	dialogContainer.style.left = left + "px";
	dialogContainer.style.display = "block";
}

function mysqlTimeStampToDate(timestamp) {
	//function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    var parts = timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
   
	return new Date(parts[0],(parts[1]-1),parts[2],parts[3],parts[4],parts[5]);
}

function dateToString(dateString) {
	var dateObj = mysqlTimeStampToDate(dateString);
	var daysOfWeek = new Array("Sunday", "Monday","Tuesday", "Wednesday","Thursday","Friday", "Saturday");
	var months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	var currDate = new Date();
	var output = '';

	// The number of milliseconds in one day
	var ONE_DAY = 1000 * 60 * 60 * 24;

	// Calculate the difference in milliseconds
	var difference_ms = Math.abs(currDate.getTime() - dateObj.getTime());
	    
	// Convert back to days and return
	var NUM_OF_DAYS = Math.round(difference_ms/ONE_DAY);

	if(NUM_OF_DAYS == 0) {
		output += "Today";
	} else if(NUM_OF_DAYS <= 7) {
		output += 'This ' + daysOfWeek[dateObj.getDay()];
	} else {
		output += daysOfWeek[dateObj.getDay()] + ", " + months[dateObj.getMonth()] + " " + dateObj.getDate();
	}

	if(dateObj.getHours() <= 12) {
		var timeString = dateObj.getHours() + "am";
	}
	else
	{
		var timeString = (dateObj.getHours()-12) + "pm";
	}
	
	
	output += ' at ' + timeString;

	return output;

}

function hideDomDialog() {
	document.getElementById("domErrorDialog").style.display = "none";
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function convertToListHtml(content) {
	return '<div style="border-color: rgb(221, 221, 202);" id="grey" class="leftBox clickableRow">' + content + '</div>';
}

function clearIt(obj) {
	obj.value = "";
}

function unClearIt(obj, text) {
	obj.value = text;
}

function checkLogin(onSuccess, onFailure) {
	var requestUrl = 'isloggedin.php?onsuccess=' + onSuccess + '&onfailure=' + onFailure;
	var request = YAHOO.util.Connect.asyncRequest('GET', requestUrl, {success: evaluator, failure: RM.logError});
}

function MM_callJS(jsStr) { //v2.0
  return eval(jsStr)
}

function $(element) {
	if(arguments.length > 1) {
		for(var i = 0, elements = [], length = arguments.length; i < length; i++) {
			elements.push($(arguments[i]));
		}
		return elements;
	}
	if(typeof(element) == 'string') {
		element = document.getElementById(element);
	}
	return element;
}

function show(element) {
	$(element).style.display = '';
	return element;
}

function hide(element) {
	$(element).style.display = 'none';
	return element;
}

function addressSuggestionEvent(id) {
	YAHOO.util.Connect.asyncRequest('GET','php_includes/Ajax.php?type=addressSuggestion&sale_id=' + URLEncode($('saleAddressSuggestionId_' + id).value) + '&address=' + URLEncode($('saleAddressSuggestion_' + id).value));
	
}

function entsub(myform) {
	if (window.event && window.event.keyCode == 13)
		myform.submit();
	else
		return true;
}

function nothing() {}