/*
* File: jsfunctions.js
* Author: Kumar Chetan
* Date: 13-Feb-06
* Time: 19:07:37
*/

/*
* Error handling
*/
function handleError(str,page,line,chr) {
	alert('OUCH!!\n Error Occured!\nPage: '+page +'\n Line no: '+line+'\n Character: ' +chr);
	return true;
}

window.onerror = handleError

/*
* Pretty simple.
*/
function getexpirydate( nodays){
	var UTCstring;
	Today = new Date();
	nomilli=Date.parse(Today);
	Today.setTime(nomilli+nodays*24*60*60*1000);
	UTCstring = Today.toUTCString();
	return UTCstring;
}

/*
* Read cookie
*/
function getcookie(cookiename) {
	var cookiestring=""+document.cookie;
	var index1=cookiestring.indexOf(cookiename);
	if (index1==-1 || cookiename=="") return ""; 
	var index2=cookiestring.indexOf(';',index1);
	if (index2==-1) index2=cookiestring.length; 
	return unescape(cookiestring.substring(index1+cookiename.length+1,index2));
}

/*
* Write cookie
*/
function setcookie(name,value,duration){
	cookiestring=name+"="+escape(value)+";EXPIRES="+getexpirydate(duration)+"; path=/";
	document.cookie=cookiestring;
	if(!getcookie(name)){
		return false;
	}else{
	return true;
	}
}

/*
* Basic function.
*/
function switchit(list,which_list){
	var listElementStyle = document.getElementById(list).style;
	if (listElementStyle.display=="none"){
		listElementStyle.display = "block";
		eval('setcookie("opened['+which_list+']",'+1+',1)');
	}else {
		listElementStyle.display = "none";
		eval('setcookie("opened['+which_list+']",'+0+',-1)');
	}
}
/*
* Name:jsfunctions.js
* Author:Kumar Chetan
* Description:Contains various javascript functions.
*/

/*
* Error handling
*/
var debugme = 1;
function handleError(str,page,line,chr) {
	if (debugme == 1) alert('OUCH!!\n Error Occured!\nPage: '+page +'\n Line no: '+line+'\n Character: ' +chr);
	return true;
}

window.onerror = handleError;

/*
* Simple. 
*/
function d(str){	document.write(str);}
/*
* Simple again. Get the dom element.
*/

function getDOMel(s) {return document.getElementById(s);}
/*
* Simply Checks the boxes
*/
function CheckAll(form2, boxname)
{
	l = eval('document.'+form2+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+form2+'.elements['+i+'];');
		if ((e.name == boxname ) && (e.type=='checkbox'))e.checked = true;
	}
}

/*
* Simply UnChecks the boxes
*/

function UnCheckAll(form2, boxname)
{
	l = eval('document.'+form2+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+form2+'.elements['+i+'];');
		if ((e.name == boxname ) && (e.type=='checkbox'))e.checked = false;
	}
}


/*
* Simple. It will send u to a 'url' on event.
*/
function go2url(url)
{
	window.location = url;
}

/*
* Will check for null Values in the array of textboxes.
*/
function chkfrm(form2, boxname, msg){
	var flag = 0; 
	var l = eval('document.'+form2+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+form2+'.elements['+i+'];');
		if ((e.name == boxname ) && (e.value=='')){if(msg!='')alert(msg);e.focus(); flag = 1;};
		if (flag==1) {return (false); break;}
	}
	if(flag==0){ return (true);	}
}

function mychkfrm(form2, boxname){
	var flag = 0; 
	//msg = (msg==''?'':msg);
	var l = eval('document.'+form2+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+form2+'.elements['+i+'];');
		if ((e.name == boxname ) && (e.value=='')){e.focus(); flag = 1;};
		if (flag==1) {return (false); break;}
	}
	if(flag==0){ return (true);	}
}

var fieldcounter = 0;

function moreFields(whichfield,wheretoadd)
{
	fieldcounter++;
	newFields = document.getElementById(whichfield).cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var i=0;i<newField.length;i++)
	{
		var theName = newField[i].name
		if (theName)
			newField[i].name = theName + fieldcounter;
	}
	var insertHere = document.getElementById(wheretoadd);
	insertHere.parentNode.insertBefore(newFields,insertHere);
}


/*
* Populates another Select box. U can say chained selects. 
*/

function replace_values(frm, triggefield, triggerval, fieldname, newvalues)
{
  v = eval('document.'+frm+'.'+triggefield+'.options[document.'+frm+'.'+triggefield+'.selectedIndex].value');
  if (v == triggerval)
  {
    var new_arr_length = eval(newvalues+'['+triggerval+'].length');
    ex_len = eval('document.'+frm+'.'+fieldname+'.length');
    for(k=(ex_len - 1); k > 0; k--)
    {
      eval('document.'+frm+'.'+fieldname+'.options['+k+'] = null;');
    }
    for(i=0;i<new_arr_length;i++)
    {
      eval('option0 = new Option('+newvalues+'['+triggerval+'][i], '+newvalues+'['+triggerval+'][i]);');
      eval('my_var = document.'+frm+'.'+fieldname);
      my_var.options[my_var.length] = option0;
    }
  }
}

function replace_values(frm, triggefield, triggerval, fieldname, newvalues)
{
  v = eval('document.'+frm+'.'+triggefield+'.options[document.'+frm+'.'+triggefield+'.selectedIndex].value');
 if (v!='' && v == triggerval)
  {
	var new_arr_length = eval(newvalues+'["'+triggerval+'"].length');
   	ex_len = eval('document.'+frm+'.'+fieldname+'.length');
    for(k=(ex_len - 1); k > 0; k--)
    {
      eval('document.'+frm+'.'+fieldname+'.options['+k+'] = null;');
    }
    for(i=0;i<new_arr_length;i++)
    {
      eval('option0 = new Option('+newvalues+'["'+triggerval+'"][i], '+newvalues+'["'+triggerval+'"][i]);');
      eval('my_var = document.'+frm+'.'+fieldname);
      my_var.options[my_var.length] = option0;
    }
  }
}
function countcheckboxes(f, el)
{
	var e, k=0;
	var l = eval('document.'+f+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+f+'.elements['+i+'];');
		if ((e.name == el ) && (e.disabled!=1) && e.checked==1)
				k++;
	}
	return(k);
}
/**********************************
Following function is to show the chandigarh sectos only*/
function selChd(frm, fieldname, newvalues, val1, val2, val3, val4, selArr){
/********************/
Array.prototype.compare = function(testArr) {
	if (this.length != testArr.length) return false; 
	for (var i = 0; i < testArr.length; i++) {  
		if (this[i].compare) {  
			if (!this[i].compare(testArr[i])) return false;     
		}
		if (this[i] !== testArr[i]) return false; 
	}   
	return true;
}
/********************/
	ex_len = eval('document.'+frm+'.'+fieldname+'.length');
	for(k=(ex_len - 1); k >= 0; k--)
    {
      eval('document.'+frm+'.'+fieldname+'.options['+k+'] = null;');
    }
	var val = 0;
	if(val1==1){
		newvalues = 'chadSec';
		val++;
	}
	if(val2==1){
		newvalues = 'mohPh';
		val++;
	}
	if(val3==1){
		newvalues = 'panchSec';
		val++;
	}
	if(val4==1){
		newvalues = 'otherSec';
		val++;
	}
	var new_arr_length = eval(newvalues+'.length');
	if(val==1){
		for(i=0;i<new_arr_length;i++)
		{
		  eval('option0 = new Option('+newvalues+'[i], '+newvalues+'[i]);');
		  eval('my_var = document.'+frm+'.'+fieldname);
		  my_var.options[my_var.length] = option0;
		   var selArrLen = eval(selArr+'.length');
		  if(selArrLen>0){
		  	for(j=0;j<selArrLen;j++){
				var selVal = '\''+eval(selArr+'[j]')+'\'';
				var opVal = '\''+my_var.options[i].value+'\'';
				var a1 = new Array(selVal);
				var a2 = new Array(opVal);
				if(a1.compare(a2)){
					my_var.options[i].selected = true;
				}//if closed
			}//for closed
		  }else{
			  my_var.options[0].selected = true;
			  my_var.options[0].value = "";
		  }//else closed
		}//for closed
	}//if val closed
}//function closed
/**********************************/
function clearAll(frm, fieldname){
	ex_len = eval('document.'+frm+'.'+fieldname+'.length');
    for(k=(ex_len - 1); k >= 0; k--)
    {
      eval('document.'+frm+'.'+fieldname+'.options['+k+'] = null;');
    }
}
/**********************************/
function checkdate(y,m,d){
	if(y=='' || m=='' || d==''){
		return(false);
	}
	leapy = 0;
	if((y%4)==0) leapy = 1;
	if((leapy==1) && (m==2) && (d>29)){
		return(false);
	}else if((leapy==0) &&(m==2) && (d>28)){
		return(false);
	}else if(((m==4) || (m==9) || (m==11)) && (d>30)){
		return(false);
	}else{
		return (true);
	}
}

/*
* This function will check for valid email
*/
function isValidEmail(field){
	var re = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,4}(\.[a-z]{2}){0,2})$/i;
	return re.test(field.value);
}

/*
* This function will check for empty input boxes
*/
function isEmpty(val){
	var re = /^\s*$/;
	return re.test(val.value);
}

/*
* This function will check for numeric inputs
*/
function isNumeric(val){
		var valid = "0123456789";
 		var ok = 1;
		var temp;
		var value1=val.value;
		for (var i=0; i<value1.length; i++) 
		{
			temp = "" + val.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1")
			ok = 0;
		}
		return (ok);
}
/*
* This function will check for correct phone numbers
*/
function isPhone(val){
		var valid = "0123456789-";
 		var ok = 1;
		var temp;
		var value1=val.value;
		for (var i=0; i<value1.length; i++) 
		{
			temp = "" + val.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1")
			ok = 0;
		}
		return (ok);
}

function check_this(obj, txt){
	if(isEmpty(obj)){alert("Please enter "+txt);obj.focus();return false;}
}


var fieldcounter = 0;

function moreFields(whichfield,wheretoadd)
{
	fieldcounter++;
	newFields = document.getElementById(whichfield).cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var i=0;i<newField.length;i++)
	{
		var theName = newField[i].name
		if (theName)
			newField[i].name = theName + fieldcounter;
	}
	var insertHere = document.getElementById(wheretoadd);
	insertHere.parentNode.insertBefore(newFields,insertHere);
}


var fieldcounter2 = 0;

function moreFields2(whichfield,wheretoadd)
{
	fieldcounter2++;
	newFields = document.getElementById(whichfield).cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var i=0;i<newField.length;i++)
	{
		var theName = newField[i].name
		if (theName)
			newField[i].name = theName + fieldcounter;
	}
	var insertHere = document.getElementById(wheretoadd);
	insertHere.parentNode.insertBefore(newFields,insertHere);
}


function openBrWindow(theURL,winName,features) { 
  window.open(theURL,winName,features);
}


/*
* Name: count_options()
* Parameters: name of select element and the form object
* Author: Kumar Chetan
* Description: This will count the number of options selected for menu named el 
* in form f.
*/
function count_sel(f, el)
{
	var e,k=0;
	var l = eval('document.'+f+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+f+'.elements['+i+'];');
		if ((e.name == el ) && (e.disabled!=1))
			for(var j=0;j<e.options.length;j++)
			{
			if(e.options[j].selected)
				k++;
			}
	}
	return(k);
}

/* Name: myfocus()
* Parameters: name of element and the form object
 * Author: Kumar Chetan
 * Description: This is a simple function. 
 */
function myfocus(f, el)
{
	var l = eval('document.'+f+'.elements.length;');
	for(var i=0;i<l;i++)
	{
		var e = eval('document.'+f+'.elements['+i+'];');
		if(e.name==el && el.disabled!=1)
		{
			e.focus();
			break;
		}
	}
}



/* Name: myisempty()
 * Parameters: name of element and the form object
 * Author: Kumar Chetan
 * Description: This is a simple function.
 * Need more error checking.
 */
function myisempty(f, el)
{
	var l = eval('document.'+f+'.elements.length;');
	for(var i=0;i<l;i++)
	{
		var e = eval('document.'+f+'.elements['+i+'];');
		if(e.name==el && el.disabled!=1)
		{
			break;
		}
	}
	if(isEmpty(e))
		return (1);
	else
		return (0);
}


/* Name: get_from_opts()
 * Parameters: a key, name of element and the form object
 * Author: Kumar Chetan
 * Description: Quick workaround to get the other value from select menu.
 */
function get_from_opts(f, el, key)
{
	key = (key!=''?key:0);
	var arr = new Array();
	var l = eval('document.'+f+'.elements.length;');
	for (var i=0;i<l;i++)
	{
		var e = eval('document.'+f+'.elements['+i+'];');
		if ((e.name == el ) && (e.disabled!=1))
			for(var j=0;j<e.options.length;j++)
			{
			if(e.options[j].selected && e.options[j].value=='-1')
				arr[key] = e.options[j].value;
			}
	}
	return(arr[key]);
}


function openMyWin(theURL, theName){
    if (!window.open(theURL, theName)) 
  	alert ('This application requires pop ups to be enabled. Kindly enable popup windows.');
	
}


function validateDate(sVal){
	// our date regular expression (http://www.regexlib.com)
	var regex =/^(?=\d)(?:(?!(?:(?:0?[5-9]|1[0-4])(?:\.|-|\/)10(?:\.|-|\/)(?:1582))|(?:(?:0?[3-9]|1[0-3])(?:\.|-|\/)0?9(?:\.|-|\/)(?:1752)))(31(?!(?:\.|-|\/)(?:0?[2469]|11))|30(?!(?:\.|-|\/)0?2)|(?:29(?:(?!(?:\.|-|\/)0?2(?:\.|-|\/))|(?=\D0?2\D(?:(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:(?:\d\d)(?:[02468][048]|[13579][26])(?!\x20BC))|(?:00(?:42|3[0369]|2[147]|1[258]|09)\x20BC))))))|2[0-8]|1\d|0?[1-9])([-.\/])(1[012]|(?:0?[1-9]))\2((?=(?:00(?:4[0-5]|[0-3]?\d)\x20BC)|(?:\d{4}(?:$|(?=\x20\d)\x20)))\d{4}(?:\x20BC)?)(?:$|(?=\x20\d)\x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]\d){0,2}(?:\x20[aApP][mM]))|(?:[01]\d|2[0-3])(?::[0-5]\d){1,2})?$/;
	if (regex.test(sVal.value)){
      		return 1;
	}else{
      		return 0;
	}
}


function validateNumeric(sVal){ 
//Input for Numeric values. Handles negatives, and comma formatted values. Also handles a single decimal point
//Matches: 	[5,000], [-5,000], [100.044] (http://www.regexlib.com)
	var regex=/^(\d|-)?(\d|,)*\.?\d*$/;
	if(regex.test(sVal.value)){
      		return 1;
	}else{
      		return 0;
	}
}
function showLoadingDiv(){
	$("statusdiv").innerHTML = "Wait Loading...<img src=\"images/loader.gif\" alt=\"Wait Saving...\" />";
}
function isFloat(val){
		var valid = "0123456789.";
 		var ok = 1;
		var temp;
		var value1=val.value;
		for (var i=0; i<value1.length; i++) 
		{
			temp = "" + val.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1")
			ok = 0;
		}
		return (ok);
}

function isISBN(val){
		var valid = "0123456789-";
 		var ok = 1;
		var temp;
		var value1=val.value;
		for (var i=0; i<value1.length; i++) 
		{
			temp = "" + val.value.substring(i, i+1);
			if (valid.indexOf(temp) == "-1")
			ok = 0;
		}
		return (ok);
}

function mytoggle(e){
	var div1 = document.getElementById(e)
	if (div1.style.display == 'none') {
		div1.style.display = 'block';
	} else {
		div1.style.display = 'none';
	}
}


var isDirty = false;
function storeChange() {
  if(navigator.appName.indexOf("Microsoft Internet Explorer") != -1){
    for (i=0; i < document.form1.elements.length ; i++) {
      document.form1.elements[i].attachEvent("onchange",setDirtyFlag);
    }
  }
  else if(navigator.appName.indexOf("Netscape") != -1) {
    document.captureEvents(Event.CHANGE);
    document.onchange=setDirtyFlag;
  }
}
 
function setDirtyFlag() {
  isDirty = true;
}
