/*
 * Read from SVN revision 41813 on Wed Feb 03, 2010 at 07:55 AM by a.bieber.
 */
/* This attach event functionality exists for sites that don't have the prototype.js
 * library loaded but need the createXHR function to run after the page is completed
 * loading. Some browsers will not make available their XMLHttpRequest objects before
 * the page has completed loading, so we can't test for them correctly.
 */
function AttachEvent(obj, evt, fnc, useCapture) {
	if (!useCapture) useCapture = false;
	if (obj.addEventListener) {
		obj.addEventListener(evt, fnc, useCapture);
		return true;
	} else if (obj.attachEvent) {
		return obj.attachEvent("on"+evt, fnc);
	} else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt] = function() { MyFireEvent(obj, evt) };
	}
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent nor addEventListener
function MyAttachEvent(obj, evt, fnc) {
	if (!obj.myEvents) obj.myEvents = {};
	if (!obj.myEvents[evt]) obj.myEvents[evt] = [];
	var evts = obj.myEvents[evt];
	evts[evts.length] = fnc;
}
function MyFireEvent(obj, evt) {
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0, len=evts.length; i<len; i++) evts[i]();
}

function getXMLHttpRequest() {
	if (window.XMLHttpRequest) {
		// If IE7, Mozilla, Safari, etc: Use native object
		var xmlHttp = new XMLHttpRequest();
	} else {
		if (window.ActiveXObject) {
			// ...otherwise, use the ActiveX control for IE5.x and IE6
			var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}

function formAsString(form, fields) {
	var form_string = "";

	if(fields)
		var splitFields = fields.split(",");

	for(var i = 0; i < form.elements.length; i++) {
		var yesElement = false;

		if(!fields)
			yesElement = true;
		else {
			for(var x = 0; x < splitFields.length; x++) {
				if(splitFields[x] == form.elements[i].name) {
					yesElement = true;
					break;
				}
			}
		}

		if(yesElement) {
			switch(form.elements[i].type) {
				case "text" :
				case "hidden" :
				case "hidden" :
				case "textarea" :
				case "password" :
				case "button" :
				case "submit" :
					form_string += form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value) + "&";
					
					break;

				case "select-one" :
					form_string += form.elements[i].name + "=" + form.elements[i].options[form.elements[i].selectedIndex].value + "&";
					
					break;
				
				case "select-multiple" :
					form_string += form.elements[i].name + "=";

					for(var x = 0; x < form.elements[i].length; x++)
						if(form.elements[i].options[x].selected)
							form_string += form.elements[i].options[x].value + ",";
					
					if(form_string.substr(form_string.length - 1, form_string.length) == ",")
						form_string = form_string.substr(0, form_string.length - 1);
					
					form_string += "&";
					break;
				
				case "checkbox" :
				case "radio" :
					form_string += form.elements[i].name + "=";

					if(form.elements[i].checked)
						form_string += form.elements[i].value + ",";
					
					if(form_string.substr(form_string.length - 1, form_string.length) == ",")
						form_string = form_string.substr(0, form_string.length - 1);
					
					form_string += "&";
					break;
			}
		}
	}

	form_string = form_string.substr(0, form_string.length - 1);
	return form_string;
}

function trim(string) {
	return string.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function getPos(obj) {
	var temp = new Object();
	temp.left = temp.top = 0;
	if (obj.offsetParent) {
		while(obj.offsetParent) {
			temp.left += obj.offsetLeft;
			temp.top += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else {
		if(obj.x)
			temp.left += obj.x;
		if(obj.y)
			temp.top += obj.y;
	}

	return temp;
}

function newAlert(id, content, top, left, width, height, parent, addScroll, zIndex, close) {
	/*
	if(id && !parent && !content && !top && !left && !width && !height)
		var parent = document.getElementById(id).parentNode;
	else
		var parent = (parent) ? document.getElementById(parent) : document.body;
	*/
	parent = document.body;

	if(id && !content && !top && !left && !width && !height) {
		if(document.getElementById(id)) {
			parent.removeChild(document.getElementById(id));
			parent.removeChild(document.getElementById(id + "_shadow"));
			parent.removeChild(document.getElementById(id + "_shim"));
		}

		return null;
	}
	else {
		var root = (document.compatMode == "CSS1Compat" ? document.documentElement : document.body);

		var	oPopup	= document.createElement("div"),
			left	= (left ? left : 0);
		if(addScroll)
			top		= (top ? top + root.scrollTop : root.scrollTop);

		if(parent === document.body) oPopup.style.position = 'absolute';
		oPopup.id = id;
		oPopup.innerHTML = content;		
		oPopup.className	= "jt_popup";
		oPopup.style.top	= top + "px";
		oPopup.style.left	= left + "px";
		if(width) oPopup.style.width = width + "px";
		if(height) oPopup.style.height = height + "px";
		if(zIndex) oPopup.style.zIndex = zIndex;
		parent.appendChild(oPopup);
		

		var shadow = document.createElement("div");
		shadow.id = id + "_shadow";
		shadow.innerHTML = "&nbsp;";
		shadow.style.height = oPopup.offsetHeight + "px";
		shadow.style.width = oPopup.offsetWidth + "px";
		shadow.className = "jt_shadow";
		shadow.style.top = parseInt(oPopup.style.top) + 3 + "px";
		shadow.style.left = parseInt(oPopup.style.left) + 3 + "px";
		if(zIndex) shadow.style.zIndex = zIndex - 1;

		var divshim = document.createElement("iframe");
		divshim.id = id + "_shim";
		divshim.src = "/blank.html";
		divshim.style.height = oPopup.offsetHeight + "px";
		divshim.style.width = oPopup.offsetWidth + "px";
		divshim.style.position = "absolute";
		divshim.style.background = "transparent";
		divshim.style.border = "none";
		divshim.style.zIndex = (zIndex) ? zIndex - 1 : "1";
		divshim.style.top = oPopup.style.top;
		divshim.style.left = oPopup.style.left;

		parent.appendChild(divshim);
		parent.appendChild(shadow);

		return oPopup;
	}
}

function windowSize(obj) {
	var temp = new Object();
	temp.width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth;
	temp.height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;

	return temp;
}

function elementSize(obj) {
	var temp = new Object();
	temp.width = obj.innerWidth ? obj.innerWidth : obj.clientWidth ? obj.clientWidth : obj.offsetWidth;
	temp.height = obj.innerHeight ? obj.innerHeight : obj.clientHeight ? obj.clientHeight : obj.offsetHeight;

	return temp;
}

function idFix(form) {
	return (form.tagName) ? form : document.getElementById(form);
}

function getElmId(form) {
	if(form.id.length)
		return form.id;
	else {
		form.id = ++formCounter;
		return form.id;
	}
}
var formCounter = 0;


function requestPage(url, formString, endFunc, ssl) {
	var randName = randomString(5) + (new Date().getTime());
	
	if(ssl && !url.match(/http/i) && window.location.protocol.match(/https/i))
		url = "https://www.jobtarget.com" + url;

	window["a" + randName] = false;

	window["r" + randName] = new getXMLHttpRequest();
	var requestType = (formString && formString.length) ? "POST" : "GET";
	window["r" + randName].open(requestType, url + ((url.match(/\?/g)) ? "&uq=" : "?uq=") + new Date().getTime(), true);
	window["r" + randName].setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	window["r" + randName].onreadystatechange = function() {
		if(window["r" + randName].readyState == 4 && !window["a" + randName]) {
			clearTimeout(window["t" + randName]);
			endFunc(trim(window["r" + randName].responseText));
		}
	}

	window["t" + randName] = setTimeout(function() {
		window["a" + randName] = true;
		window["r" + randName].abort();
		endFunc("timeout");
	}, 30000);

	window["r" + randName].send(formString);
}

function dateFormat(date, format) {
	date = new Date(Date.parse(date));

	return format.replace(/\b\w+\b/g, function(item) {
		switch(item) {
			case "mmmm" :
				switch(date.getMonth()) {
					case 0 : return "January"; break;
					case 1 : return "February"; break;
					case 2 : return "March"; break;
					case 3 : return "April"; break;
					case 4 : return "May"; break;
					case 5 : return "June"; break;
					case 6 : return "July"; break;
					case 7 : return "August"; break;
					case 8 : return "September"; break;
					case 9 : return "October"; break;
					case 10 : return "November"; break;
					case 11 : return "December"; break;
				}
				break;
			case "mmm" :
				switch(date.getMonth()) {
					case 0 : return "Jan."; break;
					case 1 : return "Feb."; break;
					case 2 : return "Mar."; break;
					case 3 : return "Apr."; break;
					case 4 : return "May"; break;
					case 5 : return "Jun."; break;
					case 6 : return "Jul."; break;
					case 7 : return "Aug."; break;
					case 8 : return "Sep."; break;
					case 9 : return "Oct."; break;
					case 10 : return "Nov."; break;
					case 11 : return "Dec."; break;
				}
				break;
			case "dd" :
				return (date.getDate() < 10) ? "0" + date.getDate() : date.getDate();
				break;
			case "d" :
				return date.getDate();
				break;
			case "yy" :
				return date.getYear();
				break;
			case "yyyy" :
				return date.getFullYear();
				break;
			case "hh" :
				return (date.getHours() % 12) ? ((date.getHours() % 12 < 10) ? "0" + date.getHours() % 12 : date.getHours() % 12) : 12;
				break;
			case "h" :
				return (date.getHours() % 12) ? date.getHours() % 12 : 12;
				break;
			case "m" :
				return date.getMinutes();
				break;
			case "mm" :
				return (date.getMinutes() < 10) ? "0" + date.getMinutes() : date.getMinutes();
				break;
			case "tt" :
				return (date.getHours() >= 12) ? "PM" : "AM";
				break;
			
			default :
				return item;
		}
	});
}

function dollarFormat(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function fixEvent(e){
    var root = (top) ? top.document.documentElement||top.document.body : document.documentElement||document.body;
    if (typeof e == "undefined") {
        e = window.event||top.window.event;
        e.pageX = e.clientX + root.scrollLeft;
        e.pageY = e.clientY + root.scrollTop;
        e.charCode = (e.type == "keypress") ? e.keyCode : 0;
        e.isChar = (e.charCode > 0);

        e.preventDefault = function() { return (this.returnValue = false); };
        e.stopPropagation = function() { return (this.cancelBubble = true) ;};
        
        if (e.type == "mouseout") {
            event.relatedTarget = e.toElement;
        } else if (e.type == "mouseover") {
            e.relatedTarget = e.fromElement;
        }

        e.target = e.srcElement;
        e.time = (new Date()).getTime();
    }
    return e;
}


function errorAlert(errors) {
	alert("The following error(s) have occurred:\n" + errors.replace(/<li>/ig, " - ").replace(/<\/li>/ig, "\n"));
}


function randomString(length) {
	var source = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

	var result = "";
	for(var i = 0; i < length; i++) {
		result += source.charAt(Math.floor(Math.random() * 62 + 0));
	}

	return result;
}


function Waiting() {
	this.inUse = false;
	this.graphic = new Image();
	this.graphic.src = "/images/progress/bar1.gif";
	this.id = "";
	this.element = "";

	if(typeof Waiting._initialized == "undefined") {
		Waiting.prototype.remove = function() {
			if(this.inUse) {
				this.inUse = false;
				newAlert(this.id);
			}
		}

		Waiting.prototype.setMessage = function(id, content) {
			var size = windowSize();
			this.id = id;
			this.inUse = true;
			this.element = newAlert(id, "<div class='jt_waiting'><div>" + content + "<br><br><img src='" + this.graphic.src + "'></div></div>", (size.height / 2) -  35, (size.width / 2) - 150, 300, 70, null, true, 100);
		}

		Waiting.prototype.reposition = function() {
			if(this.inUse) {
				var size = windowSize();
				this.element.style.top = (size.height / 2) - 35 + root.scrollTop + "px";
				this.element.style.left = (size.width / 2) - 150 + root.scrollLeft + "px";
			}
		}

		Waiting.prototype.success = function(message, hideTime, endFunc) {
			hideTime = (hideTime) ? hideTime : 2000;
			if(!this.inUse)
				this.setMessage("success_mess_" + message, message);
			this.element.innerHTML = '<div class="jt_waiting jt_waiting_success">' + message + '</div>';
			window.setTimeout("waitingMessage.remove()", hideTime);
			if(endFunc) window.setTimeout(endFunc, hideTime);
		}

		Waiting.prototype.setGraphic = function(image) {
			this.graphic.src = "/images/progress/" + image;
		}

		Waiting._initialized = true;
	}
}

var waitingMessage = new Waiting();

