// php in_array version in javascript
Array.prototype.inArray = function (value){
  for(var i=0; i < this.length; i++){
  	if(this[i] == value){
    	return true;
    }
  }
  return false;
};

function trim(Str){
	if(!Str.length)
  	return Str;

  while(Str.charAt(0) == ' ')
  	Str = Str.substring(1, Str.length);

  if(!Str.length)
  	return Str;

  while(Str.charAt(Str.length - 1) == ' ')
  	Str = Str.substring(0, Str.length - 1);

  return Str;
}

/*------------------ for input/text fields --------------------*/

function hitEnter (field, event) {

  var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;

  if (keyCode == 13)
    return true;
  else
    return false;
}

// Note: code is an allowable keyCode
function isNumberKey (evt, code) {
	/*
		code 45 = dash for negative values
	*/
	var charCode = (evt.which) ? evt.which : event.keyCode
	if ((charCode >= 48 && charCode <= 57 && (!code || charCode != code)) || (code != 8 && charCode == 8) || (code != 46 & charCode == 46) || charCode == 13 || (code == 45 && charCode == 45)){
		return true;
	}
	return false;
}

function checkText(Field){
  if((Field.type == 'text') || (Field.type == 'textarea') || (Field.type == 'password') || (Field.type == 'hidden')){
  	str = trim(Field.value);
    if(str == ''){
     	return false;
    }
  }				
  return true;
}

/*-------------------- for checkboxes --------------------*/

function isChecked(FieldName) {
	var checkboxes = document.getElementsByName(FieldName);
	
	if (typeof checkboxes.length == "undefined") {
		return checkboxes.checked;
	} else {
		for (var i = 0; i < checkboxes.length; i++) {
			if (checkboxes[i].checked) {
				return true;
			}
		}
	}
		
	return false;	
}

function getCheckbox(frm, FieldName){
	var answer = '';
	for(var i=0; i<frm.elements.length; i++){
		if(frm.elements[i].type == 'checkbox' && frm.elements[i].name == FieldName){
			if(frm.elements[i].checked){
				answer += (answer ? ',' : '') + frm.elements[i].value;
			}
		}
	}
	return answer;
}

/*-------------------- for radio buttons --------------------*/

function checkRadio(frm, FieldName){
  for(var i=0;i<frm.elements.length;i++){
    if(frm.elements[i].type == 'radio' && frm.elements[i].name == FieldName){
      if(frm.elements[i].checked){
        return true;				
      }
    }
  }
  return false;
}

function getRadio(frm, FieldName, bln_text){
  var answer = '';
  
  for(var i=0; i<frm.elements.length; i++){
  	if(frm.elements[i].type == 'radio' && frm.elements[i].name == FieldName)
      if(frm.elements[i].checked){
        answer = (bln_text ? document.getElementById('div_'+FieldName+'_'+frm.elements[i].value).innerHTML : frm.elements[i].value);
        break;
      }
  }
  return answer;
}

function setRadio(Field, val) {
	if(Field){
		var frm = Field.form;
		for (var i=0; i<frm.elements.length; i++){
			if(frm.elements[i].type == 'radio' && frm.elements[i].name == obj.name){
				if (frm.elements[i].value == val){
					frm.elements[i].checked = true;
					return true;
				}
      }
		}
	}
}

function clearRadio(frm, FieldName) {
	for (var i=0; i<frm.elements.length; i++){
		if(frm.elements[i].type == 'radio' && frm.elements[i].name == FieldName){
			frm.elements[i].checked = false;
		}
	}
}
/*------------------- for select fields ------------------*/

function checkSelect(Field){
	if(Field.options){
		for(var i=0;i<Field.options.length;i++){
			if(Field.options[i].selected && Field.options[i].value >= 1){    	
				return true;
			}
		}
	}
  return false;
}
			  
function getSelect(SelectField, bln_text){	
  var answer = '';
  for(var i=0; i<SelectField.options.length; i++){
    if(SelectField.options[i].selected){
      answer += (answer ? ',' : '') + (bln_text ? SelectField.options[i].text : SelectField.options[i].value);
    }
  }
  return answer;
}

function setSelect(Field){
  var args = setSelect.arguments;
	var val = [];
	
	for(var i=1;i<args.length;i++){
		val.push(args[i]);	
	}
		
	for(var i=0; i<Field.options.length; i++){
		if(val.inArray(Field.options[i].value)){
			Field.options[i].selected = true;
		}else{
			Field.options[i].selected = false;
		}
	}	
}

/*------------------- for form fields --------------------*/

function getFieldValue(Field, bln_text){
	if(!Field){
		return '';
	}
	
	if(typeof(dijit) != 'undefined'){
		if(dijit.byId && dijit.byId(Field.id)){
			return dijit.byId(Field.id).getValue();
		}
	}
	
	var answer = '';
	
	if(!Field.tagName || !Field.type){
		return answer;
	}
	
	var elementType = Field.tagName.toLowerCase();
	var fieldType = Field.type;
	
	if(Field.getAttribute('dojoType') == 'dijit.form.FilteringSelect'){
		elementType = 'input';		
		fieldType = 'text';
	}	
	
	switch(elementType){
		case 'input':
			switch(fieldType){
				case 'text':
					answer = Field.value;
					break;
				case 'hidden':
					answer = (bln_text ? document.getElementById('div_'+Field.id+'_text').innerHTML : Field.value);
					break;
				case 'radio' :
					answer = getRadio(Field.form, Field.name, bln_text);
					break;
				//case 'checkbox':
				//	answer = getCheckbox(Field.form, Field.name);
				//	break;
			}
			break;
		//case 'textarea':
		//	answer = get_text(Field);
		//	break;
		case 'select':
			answer = getSelect(Field, bln_text);
			break;
	}

	return answer;
}

function getFieldTextValue(Field){
	return getFieldValue(Field, true);
}

// Note: setFieldValue is only applicable to single value fields.
function setFieldValue(FieldId, Answer){
	var Field = document.getElementById(FieldId);
	if(!Field) return false;
	
	var elementType = Field.tagName.toLowerCase();
	
	switch(elementType){
		case 'input':
			switch(Field.type){
				case 'text':
					set_text(Field, Answer);
					break;
				case 'radio' :
					setRadio(Field, Answer);
					break;
				case 'checkbox':
					clear_checkboxes(Field);
					set_checkboxes(Field, Answer);
					break;
			}
			break;
		case 'textarea':
			set_text(Field, Answer);
			break;
		case 'select':
			setSelect(Field, Answer);
			break;
	}
}

/*------------------- for dojo (ajax) call --------------------*/

function ajaxCall(destinationUrl, formId, evalStr, loaderId, submitId)
{
	if(typeof(dojo) == 'undefined'){
		
			var myAjax = new Ajax.Request(destinationUrl, 
                                   {method: 'get', parameters: {}, 
                                   onComplete: function(response){
                                   	eval(response.responseText);
                                   }
                                   });
    
		                    
		return true;
	}
	
	var postParams = { 
		url: destinationUrl,
		load: function(data){
			dojo.eval(data);
			
			if(dojo.byId(loaderId)){ 
				dojo.byId(loaderId).style.display = 'none';
			}

			if(dojo.byId(submitId)){ 
				dojo.byId(submitId).style.display = '';
			}
			
			if(evalStr){
				eval(evalStr);
			}
		},

		Error: function(data) { 
			console.debug('An error occurred: ', data); 
		},

		form: formId,

		headers: { 'X-Requested-With': 'XMLHttpRequest' }

	};

	if(dojo.byId(submitId)){
		dojo.byId(submitId).style.display = 'none';
	}

	if(dojo.byId(loaderId)){
		dojo.byId(loaderId).style.display = '';
	}

	dojo.xhrPost(postParams);
}


function createElement(TagName){
  var nObj = null;
  var FieldStr = null;

  if(navigator.appName == "Netscape"){
    nObj = document.createElement(TagName);

    for(var i=1;i<createElement.arguments.length;i=i+2)
      nObj.setAttribute(createElement.arguments[i], createElement.arguments[i+1]);

  }
  else{
    FieldStr = '<' + TagName.toUpperCase();

    for(var i=1;i<createElement.arguments.length;i=i+2)
      FieldStr += ' ' + createElement.arguments[i] + '="' + createElement.arguments[i+1] + '"';

    FieldStr += '>';

    nObj = document.createElement(FieldStr);
  }

  return nObj;
}

function createText(Text){
  return document.createTextNode(Text);
}

/*------------------- for listings --------------------*/

function hasChecked(frm, FieldName, Label){
	if(!FieldName){
		FieldName = 'record[]';
	}
	
	if(getCheckbox(frm, FieldName)){
		return true;
	}
	
	return false;
}

function deleteRecords(frm, FieldName, Label, Process){
	if(!Label){
		Label = 'record(s)';
	}
	
	if(hasChecked(frm, FieldName)){
		if(confirm('You are about to delete all selected '+Label+' from the list.')){
			if(Process && frm.process){
				frm.process.value = Process;
			}
			frm.submit();
			return true;
		}
	}else{
		alert('There are no '+Label+' selected.');	
	}
	
	return false;
}

function toggleAll(bln_checked, FieldName, frm){
	if(!FieldName){
		FieldName = 'record[]';
	}
	
	if (!frm) {
		if(FieldName != 'ALL'){
			toggleAllByName(bln_checked, FieldName);
		}
	}else{
		for(var i=0;i<frm.elements.length;i++){
	    if(frm.elements[i].type == 'checkbox' && (frm.elements[i].name == FieldName || FieldName == 'ALL')){
	      setChecked(frm.elements[i], bln_checked);
			}
		}
	}	
}

function toggleAllByName(bln_checked, FieldName){	
	var checkboxes = document.getElementsByName(FieldName);
	for (var i = 0; i < checkboxes.length; i++) {
		checkboxes[i].checked = bln_checked;
	}
}

function setChecked(Field, bln_checked){
	if(bln_checked == null){
		bln_checked = true;
	}
	
	if(dijit.byId(Field.id)){
		dijit.byId(Field.id).setChecked(bln_checked);
	}else{
		Field.checked = bln_checked
	}
}

function gotoURL(custom_url){
  window.location.href = custom_url;
}

function rowOverEffect(object) {
  /*if (object.className == 'dataTableRow') object.className = 'dataTableRowOver';*/
  object.setAttribute("origClass", object.getAttribute("class"));
  object.className = 'dataTableRowOver';
}

function rowOutEffect(object) {
  /*if (object.className == 'dataTableRowOver') object.className = 'dataTableRow';*/  
  object.className = object.getAttribute("origClass");
}

function rowOver(object) {
  object.className = object.getAttribute("classOver");
}

function rowOut(object) {
  object.className = object.getAttribute("classOut");
}

// safest way to add window.onload event 
// without overwriting the previously declared window.onload
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}

// safest way to add an event to any object and to its any event
// (i.e. 'click', 'blur', etc) without interfering the 
// previously declared object event's event
function addEvent(obj, evType, fn){
 if (obj.addEventListener){
   obj.addEventListener(evType, fn, false);
   return true;
 } else if (obj.attachEvent){
   var r = obj.attachEvent("on"+evType, fn);
   return r;
 } else {
   return false;
 }
}

// Detect if the browser is IE or not.
// If it is not IE, we assume that the browser is NS.
var IE = document.all ?true : false

// If NS -- that is, !IE -- then set up for mouse capture
//if (!IE) document.captureEvents(Event.MOUSEMOVE)

// Set-up to use getMouseXY function onMouseMove
document.onmousemove = getMouseXY;

// Temporary variables to hold mouse x-y pos.s
var mouseX = 0
var mouseY = 0

// Main function to retrieve mouse x-y pos.s

function getMouseXY(e) {
  /*
  if (IE) { // grab the x-y pos.s if browser is IE
    mouseX = event.clientX + document.body.scrollLeft
    mouseY = event.clientY + document.body.scrollTop
  } else {  // grab the x-y pos.s if browser is NS
    mouseX = e.pageX
    mouseY = e.pageY
  }  
  */
  
  var res = getMousePosition(e);
  mouseX = res[0];
  mouseY = res[1];
  
  // catch possible negative values in NS4
  if (mouseX < 0){mouseX = 0}
  if (mouseY < 0){mouseY = 0}        
    
  return true
}

function getMousePosition(e)
{ 
  var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}	
	
  return [ posx, posy ];  

}  

function checkBrowser(){
  if (parseInt(navigator.appVersion)>3) {
   var widthDiff = 30;
   
   if (navigator.appName=="Netscape") {
    if(BrowserDetect.browser == "Safari") widthDiff = 16;
    
    winW = window.innerWidth-widthDiff;
    winH = window.innerHeight-16;
   } else if (navigator.appName.indexOf("Microsoft")!=-1) {
    winW = document.body.offsetWidth-20;
    winH = document.body.offsetHeight-20;
   } else if(document.documentElement){
    winH = document.documentElement.clientHeight;
    winW = document.documentElement.clientWidth-12;
   } else if(document.body.clientHeight){
    winH = document.body.clientHeight;
    winW = document.body.clientWidth;
   } 
  }   
}

function countLines(strtocount, cols) {
    var hard_lines = 1;
    var last = 0;
    while ( true ) {
        last = strtocount.indexOf("\n", last+1);
        hard_lines ++;
        if ( last == -1 ) break;
    }
    var soft_lines = Math.round(strtocount.length / (cols-1));
    var hard = eval("hard_lines  " + unescape("%3e") + "soft_lines;");
    if ( hard ) soft_lines = hard_lines;
    return soft_lines;
}

function cleanForm() {
    var textareas = document.getElementsByTagName("textarea");
    for ( var x in textareas ) {
        if ( ! textareas[x] ) continue;
        if( typeof textareas[x].rows != "number" ) continue;
        textareas[x].rows = countLines(textareas[x].value,textareas[x].cols) +1;
    }
    setTimeout("cleanForm();", 300);
}

function showMenuAccess(userTypeCode, eID){    
    var params = "";
    var url = "/access/menu/user_type_code/" + userTypeCode;
    
    
    postParams(url, eID, params, function(response, eID){
        var _content = JSON.parse(response);
        var _val = _content["output"];

        $(eID).innerHTML = _val;
    });
}

document.getElementsByClassName = function(cl) {
    var retnodes = [];
    var myclass = new RegExp('\\b'+cl+'\\b');
    var elem = this.getElementsByTagName('*');
    for (var i = 0; i < elem.length; i++) {
    var classes = elem[i].className;
    if (myclass.test(classes)) retnodes.push(elem[i]);
    }
    return retnodes;
};


addEvent(window, "load", function(){
    
    // parse table row classes for alternate coloring
    var _trObjs = document.getElementsByClassName("dataTableRow");
    var _length = _trObjs.length;
    var _idx = 1;
        
    for(var f = 0; f < _length; f++){
        _trObjs[f].setAttribute("class", "dataTableRow" + _idx);
        _idx++;
        if(_idx > 2) _idx = 1;
    }
    
    var _forms = document.forms;
        
    var _hash = unescape(self.document.location.hash.substring(1));
    if(_hash != ""){      
      return;
    }
    
    // focus on first form field
    /*
    if(_forms.length > 0){
    
        for(var f = 0; f < _forms.length; f++){
            var _elements = _forms[f].elements;
            
            if(_elements.length > 0){
                
                for(var x = 0; x < _elements.length; x++){                    
                    var _type = _elements[x].getAttribute("type");
                    if(_type && (_type == "text" || _type == "select")){
                        _elements[x].focus();                        
                        return;
                    }
                }
            }
        }
    }
    */
            
});

function isInteger(_x){
  var _exp = new RegExp(/^\d+$/);
  var _test=_exp.test(_x);

  if(!_test)
    return false;
  else
    return true;
}

function isFloat(n){
  var num = parseFloat(n);
  
  return !(isNaN(num));
}

function urlencode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir
    // %          note: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
                             
    var histogram = {}, tmp_arr = [];
    var ret = str.toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
    
    for (search in histogram) {
        replace = histogram[search];
        ret = replacer(search, replace, ret) // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
    
    return ret;
}

function popup(_url, _name, _height, _width, _resizable, _scroll_bars){
	myWidth = _width;
	myHeight = _height;
  myX = (window.screen.width/2) - ((myWidth/2) + 10);
  myY = (window.screen.height/2) - ((myHeight/2) + 50);
	myRef = window.open(_url, _name, 'left='+myX+',top='+myY+',screenX='+myX+',screenY='+myY+',status=0,resizable='+(typeof(_resizable) == 'undefined' ?  1 : _resizable)+',scrollbars='+(typeof(_scroll_bars) == 'undefined' ? 1 : _scroll_bars)+',menubar=1,width='+myWidth+',height='+myHeight);
	myRef.focus();
}

function stopPropagate(e){
	e.cancelBubble = true;	
	
	if (e.stopPropagation) 
		e.stopPropagation();
} 

/***************** FLOATING DIV *********************/

function getObject(obj){
	if(document.getElementById){
		obj = document.getElementById(obj);
	}else if(document.all){
		obj = document.all.item(obj);
	}else{
		obj = null;
	}
	return obj;
}

function moveObject(obj, e, offX, offY){
  var tempX = 0;
  var tempY = 0;
  var offsetX = 0;
	var offsetY = 0;
  var objHolder = obj;

	if(offX)
		offsetX = offX;
	if(offY)
		offsetX = offY;

  obj = getObject(obj);
  if (obj==null) return;

  if(document.all){
    tempX = event.clientX + document.body.scrollLeft;
    tempY = event.clientY + document.body.scrollTop;
  }else{
    tempX = e.pageX;
    tempY = e.pageY;
  }

  if (tempX < 0){tempX = 0}
  if (tempY < 0){tempY = 0}

  obj.style.top  = (tempY + offsetY) + 'px';
  obj.style.left = (tempX + offsetX) + 'px';
	
  displayObject(objHolder, true);
}

function displayObject(obj, show) {
  obj = getObject(obj);
  if (obj==null) return;

  obj.style.display = show ? 'block' : 'none';
  obj.style.visibility = show ? 'visible' : 'hidden';
}

/***************** end of FLOATING DIV *********************/

/*************************** DRAG **************************/
function Browser() {

var ua, s, i;

this.isIE = false;
this.isNS = false;
this.version = null;

ua = navigator.userAgent;

s = "MSIE";
if ((i = ua.indexOf(s)) >= 0) {
this.isIE = true;
this.version = parseFloat(ua.substr(i + s.length));
return;
}

s = "Netscape6/";
if ((i = ua.indexOf(s)) >= 0) {
this.isNS = true;
this.version = parseFloat(ua.substr(i + s.length));
return;
}

// Treat any other "Gecko" browser as NS 6.1.

s = "Gecko";
if ((i = ua.indexOf(s)) >= 0) {
this.isNS = true;
this.version = 6.1;
return;
}
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {

var el;
var x, y;

// If an element id was given, find it. Otherwise use the element being
// clicked on.

if (id)
dragObj.elNode = document.getElementById(id);
else {
if (browser.isIE)
dragObj.elNode = window.event.srcElement;
if (browser.isNS)
dragObj.elNode = event.target;

// If this is a text node, use its parent element.

if (dragObj.elNode.nodeType == 3)
dragObj.elNode = dragObj.elNode.parentNode;
}

// Get cursor position with respect to the page.

if (browser.isIE) {
x = window.event.clientX + document.documentElement.scrollLeft
+ document.body.scrollLeft;
y = window.event.clientY + document.documentElement.scrollTop
+ document.body.scrollTop;
}
if (browser.isNS) {
x = event.clientX + window.scrollX;
y = event.clientY + window.scrollY;
}

// Save starting positions of cursor and element.

dragObj.cursorStartX = x;
dragObj.cursorStartY = y;
dragObj.elStartLeft = parseInt(dragObj.elNode.style.left, 10);
dragObj.elStartTop = parseInt(dragObj.elNode.style.top, 10);

if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
if (isNaN(dragObj.elStartTop)) dragObj.elStartTop = 0;

// Update element's z-index.

dragObj.elNode.style.zIndex = ++dragObj.zIndex;

// Capture mousemove and mouseup events on the page.

if (browser.isIE) {
document.attachEvent("onmousemove", dragGo);
document.attachEvent("onmouseup", dragStop);
window.event.cancelBubble = true;
window.event.returnValue = false;
}
if (browser.isNS) {
document.addEventListener("mousemove", dragGo, true);
document.addEventListener("mouseup", dragStop, true);
event.preventDefault();
}
}

function dragGo(event) {

var x, y;

// Get cursor position with respect to the page.

if (browser.isIE) {
x = window.event.clientX + document.documentElement.scrollLeft
+ document.body.scrollLeft;
y = window.event.clientY + document.documentElement.scrollTop
+ document.body.scrollTop;
}
if (browser.isNS) {
x = event.clientX + window.scrollX;
y = event.clientY + window.scrollY;
}

// Move drag element by the same amount the cursor has moved.

dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
dragObj.elNode.style.top = (dragObj.elStartTop + y - dragObj.cursorStartY) + "px";

if (browser.isIE) {
window.event.cancelBubble = true;
window.event.returnValue = false;
}
if (browser.isNS)
event.preventDefault();
}

function dragStop(event) {

// Stop capturing mousemove and mouseup events.

if (browser.isIE) {
document.detachEvent("onmousemove", dragGo);
document.detachEvent("onmouseup", dragStop);
}
if (browser.isNS) {
document.removeEventListener("mousemove", dragGo, true);
document.removeEventListener("mouseup", dragStop, true);
}
}
/********************* end of DRAG *************************/


/*********************** TABS *****************************/
function showTab(tab_id, tabs, prefix){
	for(var i=1; i <= tabs; i++){
		document.getElementById((prefix ? prefix : '')+'tab' + i).style.display = (i == tab_id ? '' : 'none');
		document.getElementById((prefix ? prefix : '')+'liTab' + i).className = (i == tab_id ? 'tabselected' : 'none');
	}
}


/* email validation*/
		function echeck(str) {
		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		if (str.indexOf(at)==-1){
		   return true;
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return true;
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return true;
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return true;
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return true;
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return true;
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return true;
		 }

 //		 return false;					
	}
	
	
	
	
	
	
	
	
	/**
 *	Common JavaScript Functions for Form Validations
 *	For: registration form
 *
 *	@author: mariz
 *	@copyright: 2008
 *
 *   Use on other pages:
 *   Updates: 
 *    Sept. 15, 2008 - hitEnter added used on order pages
 */
 
function findPos(obj) {
	var curleft = curtop = 0;
		
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	} 
	/*
	else if(!obj){
	  obj = $("available_area");
	  curleft = obj.offsetLeft
		curtop = obj.offsetTop
	}
	*/
	
	return [curleft,curtop];
}
 
 
function setStateFld(country_fld){
	var obj = document.getElementById(country_fld);	
	var states = document.getElementById('state');
	
	sel_country = obj.options[obj.selectedIndex].value;
	sel_state = states.options[states.selectedIndex].value;
	
	x_select_state(sel_country, sel_state, showStates);
}

function showStates(output){
	setElementInnerHTML('div_state', output);
	setElementInnerHTML('lbl_state', (sel_country == 'US' ? "State" : "Province"));
}

function showElement(elem_id){
	document.getElementById(elem_id).style.display = 'block';
}

function hideElement(elem_id){
	document.getElementById(elem_id).style.display = 'none';
}

function clearElement(elem_id){
	document.getElementById(elem_id).innerHTML = '';
}

function setElementInnerHTML(elem_id, html_value){
	document.getElementById(elem_id).innerHTML = html_value;
}

function setFocusOnElement(elem_id){
	document.getElementById(elem_id).focus();
}

function trimXSpaces(Str){
	if(!Str.length)
  		return Str;

	while(Str.charAt(0) == ' ')
  		Str = Str.substring(1, Str.length);

	if(!Str.length)
  		return Str;

 	while(Str.charAt(Str.length - 1) == ' ')
  		Str = Str.substring(0, Str.length - 1);

	return Str;
}

function containsSomething(Field){

	if ((Field.type == "email") || (Field.type == "text") || (Field.type == "textarea") || (Field.type == "password") || (Field.type == "hidden")) {
		Str = trimXSpaces(Field.value);
		if (Str == ""){
			return false;
		}
	}

  	return true;
}

function isValidEmail(Field){
	if (!containsSomething(Field)){
  		return false;
  	}

  	if (Field.value.indexOf("@")==-1 || Field.value.indexOf("@")== 0 || Field.value.indexOf(".")==-1 || Field.value.indexOf(".")== 0 || trimXSpaces(Field.value).indexOf(" ")!=-1 || Field.value.length<6){
  		return false;
  	}
  	
	return true;  	
}

function checkCheckboxes(Form, FieldName){
	for(var i=0;i<Form.elements.length;i++)
		if(Form.elements[i].type == 'checkbox' && Form.elements[i].name == FieldName)
			if(Form.elements[i].checked)
				return true;

	return false;
}

/* jj
function checkSelect(Field){
	var i;
  
	for(i=0;i<Field.length;i++)
		if(Field.options[i].selected)
			break;
  
	if(!Field.options[i].value && (Field.selectedIndex <= 0)){
		return false;
	}

	return true;
}*/



function checkSelectM(Field/*, AlertMsg*/){
	var i;
 	var SelectProceed = 0;

	for (i=0; i<=(Field.options.length - 1); i++){
  		if (Field.options[i].selected){
  			SelectProceed = 1;
  	  		break;
  		}
  	}

	if (SelectProceed == 0){
    	//alert(AlertMsg);
  		return false;
  	}

  	return true;
}

function setRadioValue(Form, FieldName, FieldValue){
	for(var i=0; i<Form.elements.length; i++){
		if(Form.elements[i].type == 'radio' && Form.elements[i].name == FieldName)
			if(Form.elements[i].value == FieldValue){
				Form.elements[i].checked = true;
				break;
			}
	}
	return;
}

<!-- Scripts for phone number formatting -->
<!-- This script is based on the javascript code of Roman Feldblum (web.developer@programmer.net) -->
<!-- Original script : http://javascript.internet.com/forms/format-phone-number.html -->
<!-- Original script is revised by Eralper Yilmaz (http://www.eralper.com) -->
<!-- Revised script : http://www.kodyaz.com -->
<!-- Format : "(123) 456-7890" -->

var zChar = new Array(' ', '(', ')', '-', '.');
var maxphonelength = 18;
var phonevalue1;
var phonevalue2;
var cursorposition;

function ParseForNumber1(object){
  phonevalue1 = ParseChar(object.value, zChar);
}

function ParseForNumber2(object){
  phonevalue2 = ParseChar(object.value, zChar);
}

function backspacerUP(object,e) {
  if(e){
    e = e
  } else {
    e = window.event
  }
  if(e.which){
    var keycode = e.which
  } else {
    var keycode = e.keyCode
  }

  ParseForNumber1(object)

  if(keycode >= 48){
    ValidatePhone(object)
  }
}

function backspacerDOWN(object,e) {
  if(e){
    e = e
  } else {
    e = window.event
  }
  if(e.which){
    var keycode = e.which
  } else {
    var keycode = e.keyCode
  }
  ParseForNumber2(object)
}

function GetCursorPosition(){

  var t1 = phonevalue1;
  var t2 = phonevalue2;
  var bool = false
  for (i=0; i<t1.length; i++)
  {
    if (t1.substring(i,1) != t2.substring(i,1)) {
      if(!bool) {
        cursorposition=i
        window.status=cursorposition
        bool=true
      }
    }
  }
}

function ValidatePhone(object){

  var p = phonevalue1

  p = p.replace(/[^\d]*/gi,"")

  if (p.length < 3) {
    object.value=p
  } else if(p.length==3){
    pp=p;
    d4=p.indexOf('(')
    d5=p.indexOf(')')
    if(d4==-1){
      pp="("+pp;
    }
    if(d5==-1){
      pp=pp+")";
    }
    object.value = pp;
  } else if(p.length>3 && p.length < 7){
    p ="(" + p;
    l30=p.length;
    p30=p.substring(0,4);
    p30=p30+") "

    p31=p.substring(4,l30);
    pp=p30+p31;

    object.value = pp;

  } else if(p.length >= 7){
    p ="(" + p;
    l30=p.length;
    p30=p.substring(0,4);
    p30=p30+") "

    p31=p.substring(4,l30);
    pp=p30+p31;

    l40 = pp.length;
    p40 = pp.substring(0,9);
    p40 = p40 + "-"

    p41 = pp.substring(9,l40);
    ppp = p40 + p41;

    object.value = ppp.substring(0, maxphonelength);
  }

  GetCursorPosition()

  if(cursorposition >= 0){
    if (cursorposition == 0) {
      cursorposition = 2
    } else if (cursorposition <= 2) {
      cursorposition = cursorposition + 1
    } else if (cursorposition <= 4) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 5) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 6) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 7) {
      cursorposition = cursorposition + 4
    } else if (cursorposition == 8) {
      cursorposition = cursorposition + 4
      e1=object.value.indexOf(')')
      e2=object.value.indexOf('-')
      if (e1>-1 && e2>-1){
        if (e2-e1 == 4) {
          cursorposition = cursorposition - 1
        }
      }
    } else if (cursorposition == 9) {
      cursorposition = cursorposition + 4
    } else if (cursorposition < 11) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 11) {
      cursorposition = cursorposition + 1
    } else if (cursorposition == 12) {
      cursorposition = cursorposition + 1
    } else if (cursorposition >= 13) {
      cursorposition = cursorposition
    }

    var txtRange = object.createTextRange();
    txtRange.moveStart( "character", cursorposition);
    txtRange.moveEnd( "character", cursorposition - object.value.length);
    txtRange.select();
  }

}

// Trap for blank input data
function isEmpty(mytext) {
	var re = /^\s{1,}$/g; //match any white space including space, tab, form-feed, etc.
	if ((mytext.value.length==0) || (mytext.value==null) || ((mytext.value.search(re)) > -1)) {
		return true;
	}else {
		return false;
	}
}

// Validate Numeric Input (as is)
function numericInput(e){ 
	var charCode = (e.which) ? e.which : e.keyCode
	 if (charCode > 31 && (charCode < 48 || charCode > 57)){
		return false;
	 }
}

function ParseChar(sStr, sChar)
{

  if (sChar.length == null)
  {
    zChar = new Array(sChar);
  }
    else zChar = sChar;

  for (i=0; i<zChar.length; i++)
  {
    sNewStr = "";

    var iStart = 0;
    var iEnd = sStr.indexOf(sChar[i]);

    while (iEnd != -1)
    {
      sNewStr += sStr.substring(iStart, iEnd);
      iStart = iEnd + 1;
      iEnd = sStr.indexOf(sChar[i], iStart);
    }
    sNewStr += sStr.substring(sStr.lastIndexOf(sChar[i]) + 1, sStr.length);

    sStr = sNewStr;
  }

  return sNewStr;
}

function MM_preloadImages() {     if (document.images) {         var imgFiles = MM_preloadImages.arguments;         if (document.preloadArray == null) {             document.preloadArray = new Array();         }         var i = document.preloadArray.length;         with (document) {             for (var j = 0; j < imgFiles.length; j++) {                 if (imgFiles[j].charAt(0) != "#") {                     document.preloadArray[i] = new Image();                     document.preloadArray[i++].src = imgFiles[j];                 }             }         }     } } 
