function copyArray(arr){
	var a = [];
	for(var i=0; i < arr.length; i++) a[i] = arr[i];
	return a;
}
function createDelegate(t, m){
	var target = t;
	var method = m;
	var type = typeof(method);
	var args = copyArray(arguments);
	args = args.slice(2);
	return function(){
		var arr = copyArray(args);
		for(var i=0; i < arguments.length; i++) arr.push(arguments[i]);
		switch(typeof(method)){
			case "string":
				if(target != null){
					return target[method].apply(target, arr);
				} else {
					return eval(method).apply(null, arr);
				}
				break;
			case "function":
				return method.apply(target, arr);
				break;
			default:
				alert("unexpexted method type: "+typeof(method));
		};
	};
};

// element
function getElement(id){
	//return isIE() ? window[id] : document[id];
	return document.getElementById(id);
}
function element(layer){
	return typeof(layer) == "string" ? document.getElementById(layer) : layer;
}
function MM_findObj(n, d) { //v4.01
	var p,i,x;
	if(!d) d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length){
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if(!(x=d[n]) && d.all) x=d.all[n];
	for(i=0; !x && i<d.forms.length; i++) x = d.forms[i][n];
	for(i=0; !x && d.layers && i < d.layers.length; i++) x = MM_findObj(n,d.layers[i].document);
	if(!x && d.getElementById) x=d.getElementById(n);
	return x;
}

// browser
function isOpera(){
	return navigator.userAgent.indexOf("Opera") != -1;
}
function isIE(){
	return navigator.userAgent.indexOf("MSIE") != -1;
}
function isIE6(){
	return navigator.appVersion.match(/MSIE 6/i);
}
function isIE7(){
	return navigator.userAgent.match(/MSIE 7/i);
}
function isMoz(){
	return navigator.userAgent.match(/gecko/i);
}

// page offset
function getXOffset(){
	return window.pageXOffset ? window.pageXOffset : (document.documentElement && document.documentElement.scrollLeft) ? document.documentElement.scrollLeft||document.body.scrollLeft||0 : document.body.scrollLeft||0;
}
function getYOffset(){
	return window.pageYOffset ? window.pageYOffset : (document.documentElement && document.documentElement.scrollTop) ? document.documentElement.scrollTop||document.body.scrollTop||0 : document.body.scrollTop||0;
}
// inner dimentions
function getInnerWidth(){
	return window.innerWidth ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth||document.body.clientWidth||0 : document.body.clientWidth||0;
}
function getInnerHeight(){
	return window.innerHeight ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight||document.body.clientWidth||0 : document.body.clientHeight||0;
}


function setStyleTo(id, styles){
	var el = element(id);
	for(var i=0; i < styles.length; i++){
		 el.style[styles[i][0]] = styles[i][1];
	}
}
function setStyles(id, styles){
// 	alert("ID: "+id);
// 	return false;
	var  el = element(id);
	for(var i=0; i < styles.length; i++){
		 el.style[styles[i][0]] = styles[i][1];
	}
}
function setStyle(id, style, value){
	element(id).style[style] = value;
}
function getStyle(id, style){
	return element(id).style[style];
}
function styleToNum(val){
	val=String(val);
	var c,str = "",len=val.length;
	for(var i=0; i<len; i++){
		//c = val.slice(i, i+1);
		if(isNaN(str+(c=val.slice(i, i+1)))) break;
		str+=c;
	}
	if(!str.length) str = 0;
	return str;
}

//* ELEMENTS SHOW/HIDE
function showElements(){
	for(var i=0; i < arguments.length; i++){
		if(element(arguments[i])){
			element(arguments[i]).style.display = "block";
		}
	}
}
function hideElements(){
	for(var i=0; i < arguments.length; i++){
		//alert("hideElements="+arguments[i]);
		if(element(arguments[i])){
			element(arguments[i]).style.display = "none";
		}	
	}
}
function switchElements(){
	for(var i=0; i < arguments.length; i++){
        element(arguments[i]).style.display = isVisible(arguments[i]) ? "none" : "block";
	}
}
function isVisible(id){
	return !(element(id).style.display == "none");
}

function setHtmlTo(id, str){
	element(id).innerHTML = str;
}

// DIFFERENT CLASS STYLES BY ELEMENT FUNCTION START 
function stripe(id, tags, evenClass, oddClass, oddIsFirst){	
	var even = !oddIsFirst;
	var mainObj;
	if(!(mainObj = element(id))) return;	
	if(!evenClass) evenClass = 'even';
	if(!oddClass) oddClass = 'odd';	
	var elements = [];	
	var findElementsIn = function(obj, tags, depth, $elements){
		if(!depth) depth = 0;
		var elmnts = obj.getElementsByTagName(tags[depth]);
		if(tags[depth+1])
			for(var i=0; i < elmnts.length; i++) findElementsIn(elmnts[i], tags, depth+1, elements);
		else
			for(var i=0; i < elmnts.length; i++) elements.push(elmnts[i]);
	}	
	findElementsIn(mainObj, tags, 0, elements);	
	for(var i=0; i < elements.length; i++) elements[i].className = (even = !even) ? evenClass : oddClass;
}

		
// focus and blur
function setTextOnFocus(objName, def_text, toPass){
	var obj = element(objName);
	if(obj && obj.value == def_text){
		obj.value = "";
		if(toPass){
			obj.type = "password";
		}
	}
}
function setTextOnBlur(objName, def_text){
	var obj = element(objName);
	if(obj && !obj.value.length){
		obj.value = def_text;
		obj.type="text";
	}
}

/*---------------
	Cookies
---------------*/
function setCookie(cookieName, cookieValue, nDays) {
	var today = new Date();
	var expire = new Date();
	if(!nDays==null) nDays=1;
	expire.setTime(today.getTime()+3600000*24*nDays);
	document.cookie = cookieName+"="+escape(cookieValue)+";expires="+expire.toGMTString();
};
function readCookie(cookieName){
	var theCookie = ''+document.cookie;
	var ind=theCookie.indexOf(cookieName);
	if (ind==-1 || cookieName=="") return '';
	var ind1 = theCookie.indexOf(';',ind);
	if (ind1==-1) ind1 = theCookie.length;
	return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
};

function getQueryParamValue(param){
	var q = document.location.search || document.location.href.hash;
	if(q){
		var startIndex = q.indexOf(param +"=");
		var endIndex = (q.indexOf("&", startIndex) > -1) ? q.indexOf("&", startIndex) : q.length;
		if (q.length > 1 && startIndex > -1) {
			return q.substring(q.indexOf("=", startIndex)+1, endIndex);
		}
	}
	return "";
}

