//@ TAUFEEQ UR REHMAN
//@ JAVASCRIPT GENERAL LIBRARY
//@ DEVELOPED AT MBLUE DESIGNS RWP PAKISTAN
//@ VERSION 1.0
//@ COPYRIGHT TAUFEEQ UR REHAMN
//@ LAST MODIFIED 4 APRIL 2008
/******************** PROTOTYPING ***********************************/
String.prototype.trim = function(){
    return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function(){
    return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function(){
    return this.replace(/\s+$/,"");
}
// int strpos(str);
//@ Finding the string position second argument is the optional and it specifys where to start the search
String.prototype.strpos = function(chars,startFromOptional) {
	if(startFromOptional){
	 	var i = this.indexOf( chars, startFromOptional ); 
	}else{
		var i = this.indexOf(chars); 
	}
     return i >= 0 ? i : false;
}
/*******************************************************/
Array.prototype.IndexOf = function(elm){
	var exists = false;
    for(i=0; i<this.length; i++){
        if(this[i] == elm){
            exists = i;
			break;
        }
    }
    return exists;
}
Array.prototype.removeIndex = function (ind){
	 var tmp = new Array();
	 for(i=0; i<this.length; i++){
	 	if(i == ind) continue;
		tmp[tmp.length] = this[i];
	 }
	return tmp;
}
/*******************************************************/
function redirectTo(loc){
    location.href = loc;
}
/*******************************************************/
//@ bool removeChild(element)
//@ remove a dom element
function removeChild(elm){
	if(!elm){
		alert("No Element found");
		return false;
	}
	if(!elm.parentNode){
		alert("Unable to find parent node of Element "+elm);
		return false;
	}
	var prnt = elm.parentNode;
	return prnt.removeChild(elm);
}
/*******************************************************/
function returnSelectedCheckboxes(xclude){
    selectedCtrls = "";
    ctrlsArray = getElementsByType("checkbox");
    for (i=0; i<ctrlsArray.length; i++){
        if(ctrlsArray[i].checked && (ctrlsArray[i].name != xclude || ctrlsArray[i].id != xclude) ){
            if(ctrlsArray[i].name){
                selectedCtrls += "'" + ctrlsArray[i].name + "',";
            }
            else{
                selectedCtrls += "'" + ctrlsArray[i].id + "',";
            }
        }
    }
    if(selectedCtrls.length == 0){
        alert("Please select at leaset one record");
        return false;
    }
    else{
        selectedCtrls = selectedCtrls.substring(0,selectedCtrls.length-1);
        return selectedCtrls;
    }
}

/*******************************************************/
function getElementsByType(ctype){
    j = 0;
    p = Array();
    ctrlsArray = document.getElementsByTagName("input");
    for (i=0; i<ctrlsArray.length; i++){
        if(ctrlsArray[i].type == ctype){
            p[j++] = ctrlsArray[i];
        }
    }
    return p;
}
/*******************************************************/
function getElementsByContainer(ctype,d){
    j = 0;
    p = Array();
    var dv = document.getElementById(d);
    var ctrlsArray = dv.getElementsByTagName("input");
    for (i=0; i<ctrlsArray.length; i++){
        if(ctrlsArray[i].type == ctype){
            p[j++] = ctrlsArray[i];
        }
    }
    return p;
}
/*******************************************************/
function selectComboOption(cntrl,val){
    if(val != ""){
        for(i = 0; i < cntrl.options.length; i++){
            if(cntrl.options[i].value == val || cntrl.options[i].text == val){
                selindex = i;
                break;
            }
        }
        cntrl.selectedIndex = selindex;
    }
}
/*******************************************************/
function selectComboOptionById(cntrl,val){
    cntrl = document.getElementById(cntrl);
    if(val != ""){
        for(i = 0; i < cntrl.options.length; i++){
            if(cntrl.options[i].value == val || cntrl.options[i].text == val){
                selindex = i;
                break;
            }
        }
        cntrl.selectedIndex = selindex;
    }
}
/*******************************************************/
function toggleSelect(v){
    ctrlArray = getElementsByType("checkbox");
    if(v){
        for(i=0; i<ctrlArray.length; i++){
            ctrlArray[i].checked = true;
        }
    }
    else{
        for(i=0; i<ctrlArray.length; i++){
            ctrlArray[i].checked = false;
        }
    }
}
/*******************************************************/
function toggleCheckbox(x){
    ctlArray = getElementsByType("checkbox");
    flag = false;
    for(i=0; i<ctlArray.length; i++){
        if(ctlArray[i].checked == false && ctlArray[i].name != x.name){
            flag = true;
        }
    }
    if(!flag)
    x.checked = true;
    else
    x.checked = false;
}
/*******************************************************/
function resetTextBoxes(fldString){
    fldArray = fldString.split(",");
    for(i=0; i<fldArray.length; i++){
        document.getElementById(fldArray[i]).value = "";
    }
    return false;
}
/*******************************************************/
var activeTrs = new Array();
function assignColor(tr,oldColor,newColor){
    if(activeTrs[tr.rowIndex]){
        tr.bgColor = oldColor;
        activeTrs[tr.rowIndex] = 0;
    }
    else{
        tr.bgColor = newColor;
        activeTrs[tr.rowIndex] = 1;
    }
}
/*******************************************************/
function mouseOutColor(tr,oldColor,newColor){
    if(activeTrs[tr.rowIndex])
    tr.bgColor = newColor;
    else
    tr.bgColor = oldColor;
}
function validateInt(ctrl){
	if(typeof(ctrl) != "object"){
		ctrl = document.getElementById('ctrl');
	}
	if(isNaN(ctrl.value)){
		alert("Please enter numeric value");
		ctrl.value = "";
		return false;
	}
	return true;
}
/*******************************************************/
function validateInteger(ctrl,elm,e,msg){
	if(typeof(ctrl) != "object"){
		ctrl = document.getElementById('ctrl');
	}
    if(window.event){ // IE
        keynum = e.keyCode
    }
    else if(e.which){ // Netscape/Firefox/Opera
        keynum = e.which
    }
    switch(keynum){
        case 8: //for back space
        case 9: // for tab key
        case 13: // for enter key
        case 18: // for alt key
        case 16: // for both shift keys
        case 17: // for both control keys
        case 35: // for end key
        case 36: // for home key
        case 37: // for left key
        case 39: // for right key
        case 45: // for insert key
        case 46: // for del key
        case 96: // for numeric 0
        case 97: // for numeric 1
        case 98: // for numeric 2
        case 99: // for numeric 3
        case 100: // for numeric 4
        case 101: // for numeric 5
        case 102: // for numeric 6
        case 103: // for numeric 7
        case 104: // for numeric 8
        case 105: // for numeric 9
        case 116: // for F5 Key
        return true;
        break;
        case 189: // for - key
        case 109: // for - key
        for(i=0; i<elm.length; i++){
            if((elm.charAt(i)) == "-"){
                if(msg){
                    alert("Please Enter numeric value");
                }
                elm.charAt(i) = "";
                ctrl.value.elm;
                return false;
            }
        }
        break;
        case 190: // for alpha .
        case 110: // for numeric .
        for(i=0; i<elm.length; i++){
            if((elm.charAt(i)) == "."){
                if(msg){
                    alert("'.' has already been placed");
                }
                return false;
            }
        }
        break;
        default:
        keychar = String.fromCharCode(keynum)
        numcheck = /\d/
        $check = numcheck.test(keychar);
        if(!$check){
            if(msg){
                alert("Please Enter numeric value");
            }
            ctrl.value = "";
            return false;
        }
        return true;
        break;
    }
}
/*******************************************************/
function validateEmailByCtrl(ctrl_id,frm,ch_act){
	if(frm){
		frm = (document.frm?document.frm:document.getElementById(frm));
		if(ch_act) frm.action = "";
	}
	if(typeof(ctrl_id) == "object"){
		var ctrl = ctrl_id;
	}else{
		var ctrls = frm.getElementsByTagName("input");
		for(var i=0; i<ctrls.length; i++){
			if(ctrls[i].id == ctrl_id){
				var ctrl = ctrls[i];
				break;
			}
		}
	}
	if(ctrl.style.color != '#FF0000')
	var old_color = ctrl.style.color ;
	if (!validateEmail(ctrl.value)){
		ctrl.value="Invalid email";
		ctrl.style.color="#FF0000";
		return false;
	}else{
		ctrl.style.color = "#000000";
		return true;
	}
}
/*******************************************************/
function validateEmail(val){
	return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(val));
}
function validateEmails(){
    var valid=true;
    for(i=0;i<5;i++){
        cname="email"+(i+1);
        ctrl=document.getElementById(cname);
        ctrl.style.color="#000000";
        if(ctrl.value){
            if (!validateEmail(ctrl.value)){
                ctrl.value="Not Valid";
                ctrl.style.color="#FF0000";
                valid=false;
            }
        }
    }
    return valid;
}
/*******************************************************/
function selectCheckBox(ctrl,val,matchValue){
    if(val == matchValue){
        ctrl.checked = true;
    }
}
/*******************************************************/
function selectCheckBoxById(cid,val,matchValue){
    ctrl = document.getElementById(cid);
    if(val == matchValue){
        ctrl.checked = true;
    }
}

/*******************************************************/
function validateGreaterThanZero(ctrl,msg){
    if(isNaN(ctrl.value)){
        if(msg) alert("Please Enter numeric value");
        applyCtrlErrorCss(ctrl);
        ctrl.value = "";
        ctrl.focus();
        return false;
    }
    if(ctrl.value < 1){
        if(msg) alert("Enter value greater than zero ");
        applyCtrlErrorCss(ctrl);
        ctrl.value = "";
        ctrl.focus();
        return false;
    }
}
/*******************************************************/
function validateGreaterThanZeroById(ctrl,msg){
    ctrl = document.getElementById(ctrl);
    if(isNaN(ctrl.value)){
        if(msg) alert("Please Enter numeric value");
        ctrl.value = "";
        applyCtrlErrorCss(ctrl);
        ctrl.focus();
        return false;
    }
    if(ctrl.value < 1){
        if(msg) alert("Enter value greater than zero ");
        ctrl.value = "";
        applyCtrlErrorCss(ctrl);
        ctrl.focus();
        return false;
    }
}
/*******************************************************/
function isArray(obj){
    if (obj.constructor.toString().indexOf("Array") == -1)
    return false;
    else
    return true;
}

/*******************************************************/
function selectListOptions(ctrl,str){
    var str_array = null;
    str_array = str.split(",");
    var opts = ctrl.options;
    for(i=0; i<opts.length; i++){
        for(j=0; j<str_array.length; j++){
            if(ctrl.options[i].text == str_array[j]){
                ctrl.options[i].selected = true;
            }
        }
    }
}
/*******************************************************/
function applyCtrlErrorCss(ctrl){
    ctrl.style.border = "2px solid #ff0000";
}
/*******************************************************/
function checkDivRadio(divId,val){
    var dv = document.getElementById(divId);
    var elms = document.getElementsByTagName("input");
    for(i=0; i<elms.length; i++){
        if(elms[i].type == 'radio'){
            if(elms[i].value == val){
                elms[i].checked = true;
            }
        }
    }
}
/*******************************************************/
function checkDivCheckBoxesByName(divId,values,spliter){
    values = values.split(spliter);
    var dv = document.getElementById(divId);
    var elms = dv.getElementsByTagName("input");
    for(i=0; i<elms.length; i++){
        if(elms[i].type == 'checkbox'){
            for(v=0; v < values.length; v++){
                if(elms[i].name == values[v].trim()){
                    elms[i].checked = true;
                }
            }
        }
    }
}
/*******************************************************/
function checkDivCheckBoxesById(divId,values,spliter){
    values = values.split(spliter);
    var dv = document.getElementById(divId);
    var elms = dv.getElementsByTagName("input");
    for(i=0; i<elms.length; i++){
        if(elms[i].type == 'checkbox'){
            for(v=0; v < values.length; v++){
                if(elms[i].id == values[v].trim()){
                    elms[i].checked = true;
                }
            }
        }
    }
}
/*******************************************************/
function checkDivCheckBoxesByValue(divId,values,spliter){
    values = values.split(spliter);
    var dv = document.getElementById(divId);
    var elms = dv.getElementsByTagName("input");
    for(i=0; i<elms.length; i++){
        if(elms[i].type == 'checkbox'){
            for(v=0; v < values.length; v++){
                if(elms[i].value == values[v].trim() || elms[i].id == values[v].trim()){
                    elms[i].checked = true;
                }
            }
        }
    }
}
/*******************************************************/
function MM_jumpMenu(targ,selObj,restore){
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    if (restore) selObj.selectedIndex=0;
}
/*******************************************************/
function openit(url){
    window.open(url,'Status','width=200,height=120');
}
/*******************************************************/
function openit_large(url){
    testwindow=window.open(url,'Status','width=400,height=400,scrollbars=yes,statusbar=yes');
    testwindow.moveTo(500,100);
}
/*******************************************************/
function openWindow(theURL,winName,features){
    window.open(theURL,winName,features);
}
/*******************************************************/
function MM_openBrWindow(theURL,winName,features){
    window.open(theURL,winName,features);
}
/*******************************************************/
function changeBody(page){
    var parnt = window.parent;
    var cframe = parnt.mainframe;
    cframe.location = page;
}
/*******************************************************/
function confirmDelete(msg){
	if(confirm(msg)) return true;
	return false;
}
/*******************************************************/
function changeFrameSource(fid,act){
	if(act.substr(0,7) == 'http://')
		document.getElementById(fid).src = act;
	else
		document.getElementById(fid).src += act;
}
/*******************************************************/
function refreshMainFrame(obj){
	//var thedata = obj.parentNode.innerHTML = "";
	var IE = document.all?true:false;
	//window.location.reload();
	if(IE){
		var loc = window.parent.document.frames['mainframe'].location;
		window.parent.document.frames['mainframe'].location = loc;
	}else{
		var pr = window.parent;
		var dc = pr.document;
		var frm = dc.getElementById('mainFrame')
		var loc = frm.contentDocument.location;
		frm.contentDocument.location.href = loc;
	}

}
/*******************************************************/
function validateForm(ctrls,errclass,passlen,frm,alter_email){
	var firstCtrl = null;
	var retVal = true;
	var glue = "Enter ";
	var br = "<br />";
	var tc ;
	var ctrlArray = ctrls.split(",");
	for(ctrl=0; ctrl<ctrlArray.length; ctrl++)	{
		c = document.forms[frm].elements[ctrlArray[ctrl]];
		//if(!getParentForm(c,dv)) continue;
		s = ctrlArray[ctrl]+"_div";
		if(c.type == 'select-one' || c.type == 'file'){
			glue = "Select ";
			if(ctrlArray[ctrl] == "dd" ||ctrlArray[ctrl] == "mm" ||ctrlArray[ctrl] == "yy"){
				ctrlName = " Date of Birth";
			}else{
				ctrlName = ctrlArray[ctrl];
			}
		}else{
			glue = "Enter ";
			ctrlName = ctrlArray[ctrl];
		}
		prnt = c.parentNode;
		elm = document.getElementById("div_"+c.id);
		if(elm && elm != "undefined"){
			try{
				prnt.removeChild(elm);
			}catch(e){}
		}
		elm = document.createElement("div");
		elm.id = "div_"+c.id;
		prnt.appendChild(elm,c);
		elm.className = "";
		elm.innerHTML = "";
		if(c.value.trim() == ""){
			if(!firstCtrl){
				firstCtrl = c;
			}
//			alert(ctrlArray[ctrl]);
			retVal = false;
			elm.className = errclass;
			ctrlName = ctrlName.replace("_"," ");
			char = ctrlName.charAt(0).toUpperCase();
			elm.innerHTML = glue+char+ctrlName.substr(1,ctrlName.length);
		}
	}
	if(!retVal){
		firstCtrl.focus();
		return false;
	}
	if(!alter_email) alter_email = "email";
	if(document.forms[frm].elements[alter_email] && document.forms[frm].elements[alter_email] != "undefined"){
			c = document.forms[frm].elements[alter_email];
			prnt = c.parentNode;
			elm = document.getElementById("div_"+c.id);
			if(elm && elm != "undefined"){
				try{
					prnt.removeChild(elm);
				}catch(e){}
			}
			elm = document.createElement("div");
			elm.id = "div_"+c.id;
			elm.innerHTML = "";
			elm.ClassName = null;
			prnt.appendChild(elm,c);
		
		if(!validateEmail(document.forms[frm].elements[alter_email].value)){
			elm.className = errclass;
			elm.innerHTML = "Invalid Email";
			retVal = false;
			firstCtrl = c;
		}
	}
	if(!retVal){
		firstCtrl.focus();
		return false;
	}
	if(passlen == 0) return retVal;
	passArray = getElementsByContainer('password',frm);
	/*for(i=0; i<passArray.length; i++){
		alert(passArray[i].id);
	}*/
	if(passArray != ""){
	//alert(cntrl + " >> "+document.getElementById(cntrl).src);
		if(passArray[1]){
			c = passArray[0];
			prnt = c.parentNode;
			elm = document.getElementById("div_"+c.id);
			if(elm && elm != "undefined"){
				try{
					prnt.removeChild(elm);
				}catch(e){}
			}
			elm = document.createElement("div");
			elm.id = "div_"+c.id;
			elm.innerHTML = "";
			elm.ClassName = null;
			prnt.appendChild(elm,c);
			if(passArray[0].value.length < passlen){
				elm.className = errclass;
				elm.innerHTML = "Password should be minimum "+passlen+" characters";
				retVal = false;
				firstCtrl = c;
			}
			
			if(retVal){
				elm.className = null;
				elm.innerHTML = "";
				if((passArray[0].value.trim() != "") && passArray[0].value != passArray[1].value){
					passArray[0].value = "";
					passArray[1].value = "";
					elm.className = errclass;
					elm.innerHTML = "Password and confirm password dosen't match"
					retVal = false;
					firstCtrl = c;
				}
			}
		}
	}
	if(!retVal){
		firstCtrl.focus();
	}
//	return false;
	return retVal;
}
/*******************************************************/
function populateFormValues(frm,act){
	var inputs = frm.elements;
	var url = "";
	var val = false;
	for(var i=0; i<inputs.length; i++){
	  val = false;
	  if(inputs[i].type != "submit" && inputs[i].type != "button"){	
		if(inputs[i].type == "radio" || inputs[i].type == "checkbox"){
			if(inputs[i].checked){
				val = true;
			}
		}else{
			if(inputs[i].value){
				val = true;
			}
		}
	  }
	  if(val){
		url += inputs[i].name.trim()+"/"+inputs[i].value.trim()+"/";
	  }
	}
//	alert(url);
//	return false;
	frm.action = act+url;
	//return false;
}
/////*******************************************************************/////////////////
function getFormElements(frm){
	var inputs = frm.elements;
	var url = "";
	var val = false;
	for(var i=0; i<inputs.length; i++){
	  val = false;
	  if(inputs[i].type != "submit" && inputs[i].type != "button"){	
		if(inputs[i].type == "radio" || inputs[i].type == "checkbox"){
			if(inputs[i].checked){
				val = true;
			}
		}else{
			if(inputs[i].value){
				val = true;
			}
		}
	  }
	  if(val){
		url += inputs[i].name.trim()+"="+inputs[i].value.trim()+"&";
	  }
	}
	return url;
}
/*******************************************************/
function updatevals(id,catname,txtID,txtBox,pros)
{
	document.getElementById(txtID).value=id;
	document.getElementById(txtBox).value=unescape(catname);
	if(pros){
		clearProducts();
		loadxml2(id);
	}
}

/*******************************************************/
function getElementsByClassName(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
/*******************************************************/
//@to empty a control on clicking it
function emptyCtrlValue(ctrl,val){
	vals = val.split(",");
	for(var i=0; i<vals.length; i++){
		if(ctrl.value == vals[i]) 
			ctrl.value = "";
	}
}
/*******************************************************/
function getFormValues(frm,strict){
	if(typeof(frm) != "object"){
		var frm = document.getElementById(frm);
	}
	if(typeof(frm) != "object"){
		return false;
		alert("Please provide the form id or forObject");
	}
	var inputs = frm.elements;
	var url = "";
	var val = false;
	for(var i=0; i<inputs.length; i++){
	  val = false;
	  if(inputs[i].type != "submit" && inputs[i].type != "button"){	
		if(inputs[i].type == "radio" || inputs[i].type == "checkbox"){
			if(inputs[i].checked){
				val = true;
			}
		}else{
			if(inputs[i].value){
				val = true;
			}
		}
	  }
	 if(inputs[i].type != "button" && inputs[i].type != "submit"){
	  if(val){
		url += inputs[i].name.trim()+"/"+inputs[i].value.trim()+"/";
	  }else{
		  if(!strict){
	  		url += inputs[i].name.trim()+"/0/";
		  }
	  }
	 }
	}
	
	return url;
}
/*******************************************************/
function openInPanel(objForm,w,h,frameTitle){
	var url = objForm.action+getFormValues(objForm);
	GB_showCenter(frameTitle,url,h,w);
	return false;
}
/*******************************************************/

