/*
	Title: 				JavaScript Special Functions
	Author: 			Godofredo Timajo
	Location: 			Philippines
	Created: 			March 28, 2007
	Description: 		Special Functions which does not exist in Javascript Predefined functions.
	Note:				Most functions is patterned in PHP functions.
	Updates:			April 23, 2007:
						
						May 4, 2007:
							isURL, isEMail and compare_dates functions
						May 10, 2007:
							frm, elem, isIE, isFF, isOther
						September 21, 2007
							html_entity_decode, toggle
						October 05, 2007
							createElem, createInput, createLabel, createSelect
	
*/

var isIE = (navigator.appName.indexOf('Internet Explorer')==-1)?false:true;
var isFF = (navigator.appName.indexOf('Netscape')==-1)?false:true;
var isOther = (isIE || isFF)?false:true;

function doc(id){
	return document.getElementById(id);
}

function frm(form_name){
	return document.forms[form_name];
}

function elem(form_name, element_name){
	return frm(form_name).elements[element_name];
}

function isset(object){
	if(object == undefined)	return false;
	if(object == null) return false;
	if(trim(object) == '') return false;
	
	return true;	
}

function trim(str){
	
	if(isString(str)){
		
		while(str.substr(0,1) == " "){
			str = str.substr(1);
		}
		
		var len = str.length;
		while(str.substr(len-1,1) == " "){
			str = str.substr(0, len-2);
			len = str.length;
		}
	}
	return ""+str;
}

function isString(str){
	try {
		if (str.constructor == String)
			return true;
		else
			return false;
	} catch(err) {return false;}
}

function isArray(object){
	try{
		if(object.constructor == Array) return true;
		else return false;
	} catch(err) { return false; }	
}

function inArray(needle, haystack){
	if(isset(needle) && isset(haystack)){
		if (isArray(haystack)){
			var found = false;
			for(var i=0; i<haystack.length; i++){
				if(needle==haystack[i])
					found = true;
			}
			return found;
		} else return false;
	} else return false;
}

function isBool(object){
	if(object.constructor == Boolean) return true;
	else {
		var returnValue = false;
		switch(object){
			case true:
			case false:
			case 'true':
			case 'false':
			case 1:
			case 0:
			case '1':
			case '0':
				returnValue = true;
				break;
			default:
				returnValue = false;
				break;
		}
		return returnValue;
	}
}

function isTrue(object){
	if(isBool(object)){
		switch(object){
			case true:
			case 'true':
			case 1:
			case '1':
				return true;
			default:
				return false;
		}
	}
	else
		return false;
}

function isFalse(object){
	if(isBool(object)){
		switch(object){
			case false:
			case 'false':
			case 0:
			case '0':
				return true;
			default:
				return false;
		}
	}
	else
		return false;
}

function isEMail(emailAdd){
	var email_regex = new RegExp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$");
	if(emailAdd.match(email_regex))
		return true;
	else
		return false;
}

function isURL(url){
	var url_regex = new RegExp("^s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+$");
	if(url.match(url_regex))
		return true;
	else
		return false;
}

function strrev(str){
	if(isset(str) && isString(str)){
		var string = "";
		for(i=0; i<str.length; i++){
			string = str.substr(i, 1) + string;
		}
		return string;
	}
	else
		return str;
}

function formExist(formName){
	var frm = document.forms;
	if(frm.length>0){
		var found = false;
		for(i=0; i<frm.length; i++){
			if (frm[i].name == trim(formName))
				found = true;
		}
		return found;
	} else
		return false;
	
}

function retrieve_form(form_name){
	if(isset(form_name)){
		var frm = document.forms[form_name].elements;
		var data = "";
		for(i=0; i<frm.length; i++){
			
			switch(frm[i].type){
				case 'text':
				case 'hidden':
				case 'textarea':
				case 'password':
					data += (isset(data))?"&":"";
					data += frm[i].name + "=" + frm[i].value;
					break;
				case 'radio':
				case 'checkbox':
					if(frm[i].checked){	
						data += (isset(data))?"&":"";
						data += frm[i].name + "=" + frm[i].value;
					}
					break;
				case 'select-one':
					data += (isset(data))?"&":"";
					var selIndex = frm[i].selectedIndex;
					data += frm[i].name + "=" + frm[i].options[selIndex].value;
					break;
				case 'select-multiple':
					for(j=0; j<frm[i].options.length; j++){
						if(frm[i].options[j].selected){
							data += (isset(data))?"&":"";
							data += frm[i].name + "[]=" + frm[i].options[j].value;
						}
					}
					break;
				
			}
			
		}
		var dummyURL = "http://www.dummy.com/?";
		data = encodeURI(dummyURL+data);
		data = data.replace(dummyURL, '');
		return data;
	} else
		return null;
}

function no_px(str){
	str+='';
	if(str.indexOf('px')!=-1)
		return parseInt(str.substr(0, (str.length-2)));
	else
		return parseInt(str);
}

function charCount(needle, haystack){
	if(isset(needle) && isset(haystack)){
		var ctr = 0;
		for(var i=0; i<haystack.length; i++){
			var charpos = haystack.indexOf(needle, i);
			if(charpos!=-1){
				ctr++;
				i=charpos;
			}				
		}
		return ctr;
	}
	else
		return -1;
}


//dates must be YYYY-MM-DD format
//cond = >, <, =
function compare_dates(date1, date2, cond){
	
	var d1 = split(date1);
	var d2 = split(date2);
	
	var d1_d8 = new Date();
	d1_d8.setYear(d1[0]);
	d1_d8.setMonth(d1[1]-1);
	d1_d8.setDate(d1[2]);
	
	var d2_d8 = new Date();
	d2_d8.setYear(d2[0]);
	d2_d8.setMonth(d2[1]-1);
	d2_d8.setDate(d2[2]);
	
	switch(cond){
		case '>':
			if(d1_d8>d2_d8)
				return true;
			else
				return false;
			break;
		case '<':
			if(d1_d8<d2_d8)
				return true;
			else
				return false;
			break;
		default:
			if(d1_d8==d2_d8)
				return true;
			else
				return false;
	}
	
}

function ask(type){
	type = (type==undefined)?'delete':type;
	if(confirm("Continue to "+type+"?"))
		return true;
	else
		return false;
}


function html_entity_decode(str){
	return str.replace(/&#(\d+);/g, function(wholematch, parenmatch1) {return String.fromCharCode(+parenmatch1); });
}

function toggle(id){
	if(doc(id).style.display == 'none')
		doc(id).style.display = 'block';
	else
		doc(id).style.display = 'none';
}

/*
Array.prototype.lbound = function(){
	var i = 0;
	while(this[i]==undefined)
		i++;
	return i;
}

Array.prototype.ubound = function(){
	return this.length-1;
}

Array.prototype.search = function(toFind){
	if(isset(toFind)){
		var found = false;
		for(i=this.lbound(); i<=this.ubound(); i++){
			if(this[i] == toFind)
				found = true;
		}
		return found;
	}
	else
		return false;
}*/



function bookmarksite(){
	title = "";
	url = "";
	if (window.sidebar) // firefox
		window.sidebar.addPanel(title, url, "");
	else if(window.opera && window.print){ // opera
		var elem = document.createElement('a');
		elem.setAttribute('href',url);
		elem.setAttribute('title',title);
		elem.setAttribute('rel','sidebar');
		elem.click();
	} 
	else if(document.all)// ie
		window.external.AddFavorite(url, title);
}


function createElem(elem){
	return document.createElement(elem);
}

function createInput(type, name, _class, params){
	if (type=="textarea") {
		var input  = createElem("textarea");
		input.cols=40;
		input.rows=5;
	} else {
		var input  = createElem("input");
		input.type = type;
	}
	input.name = name;
	if(isset(_class))
		input.className = _class;
	
	if(isset(params)){
		for(var i=0; i<params.length; i++)
			input.setAttribute(params[i][0], params[i][1]);
	}

	if (type=="textarea") {
		input.cols=40;
		input.rows=5;
	}	
	return input;
}

function createLabel(value, _class, params){
	var label       = createElem("label");
	label.innerHTML = value;
	if(isset(_class))
		label.className = _class;
		
	if(isset(params)){
		for(var i=0; i<params.length; i++)
			label.setAttribute(params[i][0], params[i][1]);
	}
	return label;
}

function createSelect(name, opts, _class, params){
	
	var select       = createElem("select");
	select.name		 = name;
	if(isset(_class))
		select.className = _class;

	if(isset(params)){
		for(var i=0; i<params.length; i++)
			select.setAttribute(params[i][0], params[i][1]);
	}
	select.options.length = 0;
	for(var i=0; i<opts.length; i++)
		select.options[i] = new Option(opts[i][1], opts[i][0]);
	
	return select;
}

function createFieldset(legend, legendclass, _class){
	var FIELDSET = createElem("fieldset");
	if(isset(_class))
		FIELDSET.className = _class;
		
	var LEGEND = createElem("legend");
	if(isset(legendclass))
		LEGEND.className = legendclass;
	LEGEND.innerHTML = legend;
	
	FIELDSET.appendChild(LEGEND);
	
	return FIELDSET;
}

function createImage(src, _class, params){
	var IMG = createElem("img");
	IMG.src = src;
	
	if(isset(_class))
		IMG.className = _class;
	
	if(isset(params)){
		for(var i=0; i<params.length; i++)
			IMG.setAttribute(params[i][0], params[i][1]);
	}
	
	return IMG;
}