// JavaScript Document

function site_url(url)
{
	url = sid(url);
	var prefix = base_url();
	if (url.indexOf(prefix)>-1)
		return url;
	else
		return prefix+url;
}

function redirect(url)
{
	window.location.href = site_url(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, url, callback, func)
{
	var f = document.forms[0];
	
	f.__EVENTTARGET.value = target;
	f.__EVENTARGUMENT.value = args;
	
	if (url.length == 0)
		url = f.action;

	ajaxRun_post(url, request(), callback, func);
}

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;
}

function styleObject(name, nest)
{
	var w3c = document.getElementById ? true : false;
	var iex = document.all ? true : false;
	var ns4 = document.layers ? true : false;	
	nest = nest ? 'document.'+nest+'.' : '';
	return w3c ? document.getElementById(name).style : iex ? document.all[name].style : ns4 ? eval(nest+'document.'+name) : false;	
}

// AJAX
function ajaxObject()
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }
  return xmlHttp;
}


function ajaxRun(url, callback, func)
{
	var xmlHttp = ajaxObject();
	
	xmlHttp.onreadystatechange = function()
	{
		// We are going to write some code here	
		if (xmlHttp.readyState == 4)
		{
			// Get the data from the server's response 
			if (callback)
				callback.call(this, xmlHttp.responseText);
			if (func)
				func.call(this, true);
		}
	}	
	
	if (func)
		func.call(this, false);
	xmlHttp.open("GET", site_url(url), true);
	xmlHttp.send(null);			
}

function ajaxRun_post(url, query, callback, func)
{
	var xmlHttp = ajaxObject();
	
	xmlHttp.onreadystatechange = function()
	{
		// We are going to write some code here	
		if (xmlHttp.readyState == 4)
		{
			// Get the data from the server's response 
			if (callback)
				callback.call(this, xmlHttp.responseText);
			if (func)
				func.call(this, true);
		}
	}	
	
	if (func)
		func.call(this, false);
	xmlHttp.open("POST", site_url(url), true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//xmlHttp.setRequestHeader("Content-length", obj.length);
	//xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(query);
}

// Validation
var clientUI =
{	
	addItem : function (group, param)
	{
		if (clientUI.clients[group] == undefined)
			clientUI.clients[group] = [];
		
		var o = new ValidateItem(param);
		clientUI.clients[group][clientUI.clients[group].length] = o;
	},	
			
	clients : [],
	
	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);
	},
	
	ajax : function (option)
	{
	}
};

function validateItems(gname)
{
	if (gname == undefined)
		gname = 'default';
		
	if (clientUI.clients[gname] != undefined)
	{
		var items = clientUI.clients[gname];
		for (var i=0; i<items.length; i++)
		{			
			if (!items[i].validate())
			{
				items[i].focus();
				return false;
			}
		}		
		return true;
	}
	return true;
}

function validateAllItems(gname)
{
	if (gname == undefined)
		gname = 'default';
	var ret = true;
	if (clientUI.clients[gname] != undefined)
	{
		var items = clientUI.clients[gname];
		for (var i=0; i<items.length; i++)
		{
			if (!items[i].validate())
			{
				items[i].focus();
				ret = false;
			}
		}
	}
	return ret;
}

ValidateItem = function(param)
{
	this.id = param.id;
	this.validation_func = param.validation_func;
	this.error_msg = param.error_msg;
	this.error_div = param.error_div;
	this.validation_data = param.validation_data;
	
	this.validate = function()
	{
		var o = elementObject(this.id);
		if (o == null)
			o = this.id;
			
		var ret;

		if (typeof this.validation_data == 'object')
			eval('ret='+this.validation_func+'(o,'+this.validation_data+')');
		else
			eval('ret='+this.validation_func+'(o,"'+this.validation_data+'")');

		if (ret == false)
		{
			if (this.error_div)
			{
				var e = elementObject(this.error_div);
				e.innerHTML = this.error_msg;
			} else
				alert(this.error_msg);
			return false;
		} else {
			if (this.error_div)
			{
				var e = elementObject(this.error_div);
				e.innerHTML = '';
			}
		}
		
		return true;
	}
	
	this.focus = function()
	{
		var o = elementObject(this.id);
		o.focus();
	}
}
