// JavaScript Document

function redirect(url)
{
	var prefix = index();
	if (url.indexOf(prefix)>-1)
		window.location.href = url;
	else
		window.location.href = prefix+'/App/page/'+url;
}

function request()
{
	var s = "";
    var c = document.forms[0].elements;
	for(var i=0; i<c.length; i++) 
	{
		obj = c[i];		
		if (obj.type == 'checkbox' || obj.type == 'radio') 
		{	
			if (obj.checked)
			{
				if (obj.value)
					s += obj.name+"="+obj.value+"&";
				else
					s += obj.name+"=on&";
			}
		} else {
			// urldecode in PHP
			s += obj.name+"="+escape(encodeURI(obj.value))+"&";
		}
	}
	return s;
}

function __dopostback(target, args)
{
	var f = document.forms[0];
	f.__EVENTTARGET.value = target;
	f.__EVENTARGUMENT.value = args;
	f.submit();
}

function __docallback(target, args, callback, func)
{
	var f = document.forms[0];
	f.__EVENTTARGET.value = target;
	f.__EVENTARGUMENT.value = args;
	ajaxRun_post(f.action, request(), callback, func);
}

var clientUI =
{	
	addItem : function (id, property, callback, error_msg, error_id)
	{
		var item = new ValidateItem(id, property, callback, error_msg, error_id);
		clientUI.clients[clientUI.clients.length] = item;
	},	
			
	clients : []
};

function validateItems()
{
	for (var i=0; i<clientUI.clients.length; i++)
	{
		if (!clientUI.clients[i].validate())
		{
			clientUI.clients[i].focus();
			return false;
		}
	}
	return true;
}

ValidateItem = function(id, property, callback, error_msg, error_id)
{
	this.id = id;
	this.property = property;
	this.callback = callback;
	this.error_msg = error_msg;
	this.error_id = error_id;
	
	this.validate = function()
	{
		var o = elementObject(this.id);
		var ret;
		eval('ret='+this.callback+'(o.'+this.property+')');
		if (ret == false)
		{
			if (this.error_id)
			{
				var e = elementObject(this.error_id);
				e.innerHTML = this.error_msg;
			} else
				alert(this.error_msg);
			return false;
		}
		
		return true;
	}
	
	this.focus = function()
	{
		var o = elementObject(this.id);
		o.focus();
	}
}

function registerEvent(o, t, f) 
{
	if (o.addEventListener)
	{
		if (t=='mousewheel')
		{
			o.addEventListener('DOMMouseScroll', f, false);
		} 
		o.addEventListener(t, f, false);
	}
	else if (o.attachEvent) 
		o.attachEvent('on'+ t, f);
	else 
		o['on'+ t] = f;
};

function unregisterEvent(o, t, f) 
{
	if (o.removeEventListener) 
	{
		if (t=='mousewheel')
		{
			o.removeEventListener('DOMMouseScroll', f, false);
		} 		
		o.removeEventListener(t, f, false);
	} else if (o.detachEvent) 
		o.detachEvent('on'+ t, f);
	else 
		o['on'+ t] = null;
};

function eventObject(evt) 
{
    return (evt) ? evt : window.event;
}

function senderObject(evt) 
{
    evt = eventObject(evt);
	return (evt.target) ? evt.target : evt.srcElement;
}

function elementObject(id)
{
	if (document.getElementById)
		return document.getElementById(id);
	else if (document.all)
		return document.all[id];
	else if (document.layers)
		return document.layers[id];
	return null;
}

PageInfo = {	
	px : function ()
	{
		return document.childNodes ? 'px' : 0;
	},
	
	getResolutionWidth  : function() { return self.screen.width; },
	getResolutionHeight : function() { return self.screen.height; },
	getColorDepth       : function() { return self.screen.colorDepth; },

	getScrollLeft       : function() { var scrollLeft = 0; if (document.documentElement && document.documentElement.scrollLeft && document.documentElement.scrollLeft != 0) { scrollLeft = document.documentElement.scrollLeft; } if (document.body && document.body.scrollLeft && document.body.scrollLeft != 0) { scrollLeft = document.body.scrollLeft; } if (window.pageXOffset && window.pageXOffset != 0) { scrollLeft = window.pageXOffset; } return scrollLeft; },
	getScrollTop        : function() { var scrollTop = 0; if (document.documentElement && document.documentElement.scrollTop && document.documentElement.scrollTop != 0) { scrollTop = document.documentElement.scrollTop; } if (document.body && document.body.scrollTop && document.body.scrollTop != 0) { scrollTop = document.body.scrollTop; } if (window.pageYOffset && window.pageYOffset != 0) { scrollTop = window.pageYOffset; } return scrollTop; },

	getDocumentWidth    : function() { var documentWidth = 0; var w1 = document.body.scrollWidth; var w2 = document.body.offsetWidth; if (w1 > w2) { documentWidth = document.body.scrollWidth; } else { documentWidth = document.body.offsetWidth; } return documentWidth; },
	getDocumentHeight   : function() { var documentHeight = 0; var h1 = document.body.scrollHeight; var h2 = document.body.offsetHeight; if (h1 > h2) { documentHeight = document.body.scrollHeight; } else { documentHeight = document.body.offsetHeight; } return documentHeight; },
	getVisibleWidth     : function() { var visibleWidth = 0; if (self.innerWidth) { visibleWidth = self.innerWidth; } else if (document.documentElement && document.documentElement.clientWidth) { visibleWidth = document.documentElement.clientWidth; } else if (document.body) { visibleWidth = document.body.clientWidth; } return visibleWidth; },
	getVisibleHeight    : function() { var visibleHeight = 0; if (self.innerHeight) { visibleHeight = self.innerHeight; } else if (document.documentElement && document.documentElement.clientHeight) { visibleHeight = document.documentElement.clientHeight; } else if (document.body) { visibleHeight = document.body.clientHeight; } return visibleHeight; },
	
	windowSize : function() {
	  var myWidth = 0, myHeight = 0;
	  if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	  }
	
	  return [myWidth, myHeight];
	},

	getElementLeft      : function(element) { var element = (typeof element == "string") ? elementObject(element) : element; var left = element.offsetLeft; var oParent = element.offsetParent; while (oParent != null) { left += oParent.offsetLeft; oParent = oParent.offsetParent; } return left; },
	getElementTop       : function(element) { var element = (typeof element == "string") ? elementObject(element) : element; var top = element.offsetTop; var oParent = element.offsetParent; while (oParent != null) { top += oParent.offsetTop; oParent = oParent.offsetParent; } return top; },
	getElementWidth     : function(element) { var element = (typeof element == "string") ? elementObject(element) : element; return element.offsetWidth; },
	getElementHeight    : function(element) { var element = (typeof element == "string") ? elementObject(element) : element; return element.offsetHeight; },
	
	addFrag : function(str)
	{
		var frag = document.createDocumentFragment();
		frag.appendChild(document.createTextNode(str));
		document.body.appendChild(frag);	
	},
	
	addStr : function(str)
	{
		if( document.layers && window.Layer && document.classes ) {
			//create a layer 350px wide
			document.layers['newName'] = new Layer( 350 );
			//write its content
			document.layers['newName'].document.open();
			document.layers['newName'].document.write(str);
			document.layers['newName'].document.close();
			//style it
			document.layers['newName'].left = 0;
			document.layers['newName'].top = 0;
			document.layers['newName'].visibility = 'show';
		} else if( document.body ) {
			var theString = '<div style="position:absolute;left:0px;top:0px;' +
				'width:350px;">'+str+'</div>';
			if( document.body.insertAdjacentHTML ) {
				document.body.insertAdjacentHTML( 'beforeEnd', theString );
			} else if( typeof( document.body.innerHTML ) != 'undefined' ) {
				document.body.innerHTML += theString;
			} else {
				//FAILURE, nothing works
			}
		} else {
		  //FAILURE, nothing works
		}
	},
		
	onEnter : function (evt)
	{
		var e = eventObject(evt);
		if ((e.which && e.which == 13) || 
			(e.keyChar && e.keyChar == 13) ||
			(e.keyCode && e.keyCode == 13))
			return true;
		else
			return false;
	},
	
	evalScript : function (data)
	{
		var head = document.getElementsByTagName("head")[0] || document.documentElement;
		var script = document.createElement("script");
		script.type = "text/javascript";
		try{
			script.setAttribute('text', data);
		} catch(e) {}
		try{
			script.appendChild(document.createTextNode(data));
		} catch(e) {}
		head.insertBefore(script, head.firstChild);
		head.removeChild(script);
	},

	getMouseX           : function() { return PageInfo.mouseX; },
	getMouseY           : function() { return PageInfo.mouseY; },


	// HELPER CODE FOR TRACKING MOUSE POSITION
	mouseX: 0,
	mouseY: 0,
	onMouseMove: function(e) { e = eventObject(e); PageInfo.mouseX = e.clientX + PageInfo.getScrollLeft(); PageInfo.mouseY = e.clientY + PageInfo.getScrollTop(); }
};
// HELPER CODE FOR TRACKING MOUSE POSITION
registerEvent(document, "mousemove", PageInfo.onMouseMove);


