var IsIE;

function fInitMSIE(){
    if (navigator.userAgent.indexOf("MSIE") != -1){
        IsIE = true;
    }else{
        IsIE = false;
    }
}

fInitMSIE();

function redirect(location) {
    document.location.href = location;
}

var isAllSelected=false;

function selectAll(checkbox,name){
    var list = document.getElementsByTagName("input");
    //check all
    if(checkbox.checked){
	    for(var i=0; i<list.length; i++) {
	        if(list[i].type == "checkbox" && list[i].name == name){
	                list[i].checked = true;
	        }
	    }
    } else {
    	for(var i=0; i<list.length; i++) {
	        if(list[i].type == "checkbox" && list[i].name == name){
	                list[i].checked = false;
	        }
	    }
    }
}

function isAllChecked(name) {
    var list = document.getElementsByTagName("input");
    for(var i = 0; i<list.length; i++){
        if(list[i].type == "checkbox" && list[i].name == name) {
            if (!list[i].checked){
                return false;
            }
        }
    }
    return true;
}

function checkSelection(name, selectAllBox) {
    isAllSelected = isAllChecked(name);
    var selectAll = document.getElementById(selectAllBox);
    selectAll.checked = isAllSelected ? "checked" : "";
}

function LabelValue(label, value) {
	this.label = label;
	this.value = value;
	this.value.i = 0;
}

function removeOptions(selector) {
	while (selector.options.length > 0) {
		selector.removeChild(selector.firstChild);
	}
}

function removeSelectedOptions(selector, selectedSelector) {
	for (var i = 0; i < selector.options.length; i++) {
		for(var j = 0; j < selectedSelector.options.length; j++) {
			if (selector.options[i] == null) {
					continue;
			}
			if (selector.options[i].value == selectedSelector.options[j].value) {
				selector.options[i] = null;
			}
		}
	}
	sortSelect(selector);
}

// private function
function addOptions(selector, list) {
	for (var i = 0; i < list.length; i++) {
		var option = document.createElement("option");
		option.value = list[i].value;
		var label = document.createTextNode(list[i].label);
		option.appendChild(label);
		
		selector.appendChild(option);
	}
}

function confirmDelete(msg) {
    ans = confirm(msg);
    if (ans) {
        return true;
    } else {
        return false;
    }
}

/* This function is used to set cookies */
function setCookie(name,value,expires,path,domain,secure) {
  document.cookie = name + "=" + escape (value) +
    ((expires) ? "; expires=" + new Date((new Date()).getTime() + expires).toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}

/* This function is used to get cookies */
function getCookie(name) {
	var prefix = name + "=" 
	var start = document.cookie.indexOf(prefix) 

	if (start==-1) {
		return null;
	}
	
	var end = document.cookie.indexOf(";", start+prefix.length) 
	if (end==-1) {
		end=document.cookie.length;
	}

	var value=document.cookie.substring(start+prefix.length, end) 
	return unescape(value);
}

/* This function is used to delete cookies */
function deleteCookie(name,path,domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

// set display
function setDisplay(targetId, bVisible) {
    if (document.getElementById) {
        target = document.getElementById(targetId);
        if (bVisible == true)
        {
            target.style.display="";
        } else {
            target.style.display="none";
        }
    }
}

function toggleDisplay(targetId) {
    if (document.getElementById) {
        target = document.getElementById(targetId);
        if (target.style.display == "none") {
            target.style.display="";
        } else {
            target.style.display="none";
        }
    }
}

function select(list, value) {
    if (list == null) {
        return;
    }
    for(var i = 0; i < list.options.length; i++)  {
        if (list.options[i].value == value) {
            list.options[i].selected = "selected";
        }
    }
}

/* Function to hide form elements that show through
the search form when it is visible */
function toggleForm(frmObj, iState) // 1 visible, 0 hidden
{
    for(var i = 0; i < frmObj.length; i++) {
        if (frmObj.elements[i].type.indexOf("select") == 0 || frmObj.elements[i].type.indexOf("checkbox") == 0) {
            frmObj.elements[i].style.visibility = iState ? "visible" : "hidden";
        }
    }
}

function selectCategory(from) {
    var url = '/admin/category_sheet.php';
    if (from != null) {
        url = url + "?from=" + from;
    }

    var properties = 'width=300,height=250,toolbar=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,modal=yes';
    window.open(url, 'Select_Category', properties);
    /*
    if (IsIE) {
    var info = window.showModalDialog('/admin/category_sheet.php', 'Select Category');
    if (info != null) {
    var i = info.indexOf("_");
    var id = info.substring(0, i);
    var name = info.substring( i + 1 );
    var categoryTag = document.getElementById('category');
    categoryTag.value = id;
    var categoryNameTag = document.getElementById('categoryName');
    categoryNameTag.value = name;
    }
    } else {
    window.open('/admin/category_sheet.php', 'Select Category', 'toolbar=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,modal=yes');
    }
    */
}

// This function is for stripping leading and trailing spaces
function trim(str) {
    if (str != null) {
        var i;
        for (i=0; i<str.length; i++) {
            if (str.charAt(i)!=" ") {
                str=str.substring(i,str.length);
                break;
            }
        }

        for (i=str.length-1; i>=0; i--) {
            if (str.charAt(i)!=" ") {
                str=str.substring(0,i+1);
                break;
            }
        }

        if (str.charAt(0)==" ") {
            return "";
        } else {
            return str;
        }
    }
}
// validate required
function validateRequired(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var messages = new Array();
    var formName = form.getAttributeNode("name");
    oRequired = eval('new ' + formName.value + '_required()');

    for (x in oRequired) {
        var field = form[oRequired[x][0]];

        if (field.type == 'text'
        || field.type == 'textarea'
        || field.type == 'hidden'
        || field.type == 'password') {
            if (trim(field.value) == '') {
                if (i == 0) {
                    focusField = field;
                }
                messages[i++] = oRequired[x][1];

                bValid = false;
            }
        } else if (field.length > 0) {
            var selectedCount = 0;
            for(var j = 0; j < field.length; j++) {
                if (field[j].checked || field[j].selected) {
                    selectedCount++;
                    break;
                }
            }
            bValid = (selectedCount > 0);
            if (!bValid) {
                if (i == 0) {
                    focusField = field;
                }
                messages[i++] = oRequired[x][1];
            }
        }
    }

    if (messages.length > 0) {
        if (focusField != null) {
            focusField.focus();
        }
        alert(messages.join('\n'));
    }

    return bValid;
}
// validate date
function isValidDate(day, month, year) {
    if (month < 1 || month > 12) {
        return false;
    }
    if (day < 1 || day > 31) {
        return false;
    }
    if ((month == 4 || month == 6 || month == 9 || month == 11) &&
    (day == 31)) {
        return false;
    }
    if (month == 2) {
        var leap = (year % 4 == 0 &&
        (year % 100 != 0 || year % 400 == 0));
        if (day>29 || (day == 29 && !leap)) {
            return false;
        }
    }
    return true;
}

function validateDate(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    oDate = eval('new ' + formName.value + '_DateValidations()');

    for (x in oDate) {
        var value = form[oDate[x][0]].value;
        var datePattern = oDate[x][2]("datePatternStrict");
        // try loose pattern
        if (datePattern == null)
        datePattern = oDate[x][2]("datePattern");
        if ((form[oDate[x][0]].type == 'text' ||
        form[oDate[x][0]].type == 'textarea') &&
        (value.length > 0) &&
        (datePattern.length > 0)) {
            var MONTH = "MM";
            var DAY = "dd";
            var YEAR = "yyyy";
            var orderMonth = datePattern.indexOf(MONTH);
            var orderDay = datePattern.indexOf(DAY);
            var orderYear = datePattern.indexOf(YEAR);
            if ((orderDay < orderYear && orderDay > orderMonth)) {
                var iDelim1 = orderMonth + MONTH.length;
                var iDelim2 = orderDay + DAY.length;
                var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                if (iDelim1 == orderDay && iDelim2 == orderYear) {
                    dateRegexp = new RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$");
                } else if (iDelim1 == orderDay) {
                    dateRegexp = new RegExp("^(\\d{1,2})(\\d{1,2})[" + delim2 + "](\\d{4})$");
                } else if (iDelim2 == orderYear) {
                    dateRegexp = new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,2})(\\d{4})$");
                } else {
                    dateRegexp = new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{4})$");
                }
                var matched = dateRegexp.exec(value);
                if(matched != null) {
                    if (!isValidDate(matched[2], matched[1], matched[3])) {
                        if (i == 0) {
                            focusField = form[oDate[x][0]];
                        }
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                    }
                } else {
                    if (i == 0) {
                        focusField = form[oDate[x][0]];
                    }
                    fields[i++] = oDate[x][1];
                    bValid =  false;
                }
            } else if ((orderMonth < orderYear && orderMonth > orderDay)) {
                var iDelim1 = orderDay + DAY.length;
                var iDelim2 = orderMonth + MONTH.length;
                var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                if (iDelim1 == orderMonth && iDelim2 == orderYear) {
                    dateRegexp = new RegExp("^(\\d{1,2})(\\d{1,2})(\\d{4})$");
                } else if (iDelim1 == orderMonth) {
                    dateRegexp = new RegExp("^(\\d{1,2})(\\d{1,2})[" + delim2 + "](\\d{4})$");
                } else if (iDelim2 == orderYear) {
                    dateRegexp = new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,2})(\\d{4})$");
                } else {
                    dateRegexp = new RegExp("^(\\d{1,2})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{4})$");
                }
                var matched = dateRegexp.exec(value);
                if(matched != null) {
                    if (!isValidDate(matched[1], matched[2], matched[3])) {
                        if (i == 0) {
                            focusField = form[oDate[x][0]];
                        }
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                    }
                } else {
                    if (i == 0) {
                        focusField = form[oDate[x][0]];
                    }
                    fields[i++] = oDate[x][1];
                    bValid =  false;
                }
            } else if ((orderMonth > orderYear && orderMonth < orderDay)) {
                var iDelim1 = orderYear + YEAR.length;
                var iDelim2 = orderMonth + MONTH.length;
                var delim1 = datePattern.substring(iDelim1, iDelim1 + 1);
                var delim2 = datePattern.substring(iDelim2, iDelim2 + 1);
                if (iDelim1 == orderMonth && iDelim2 == orderDay) {
                    dateRegexp = new RegExp("^(\\d{4})(\\d{1,2})(\\d{1,2})$");
                } else if (iDelim1 == orderMonth) {
                    dateRegexp = new RegExp("^(\\d{4})(\\d{1,2})[" + delim2 + "](\\d{1,2})$");
                } else if (iDelim2 == orderDay) {
                    dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{1,2})(\\d{1,2})$");
                } else {
                    dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{1,2})[" + delim2 + "](\\d{1,2})$");
                }
                var matched = dateRegexp.exec(value);
                if(matched != null) {
                    if (!isValidDate(matched[3], matched[2], matched[1])) {
                        if (i == 0) {
                            focusField = form[oDate[x][0]];
                        }
                        fields[i++] = oDate[x][1];
                        bValid =  false;
                    }
                } else {
                    if (i == 0) {
                        focusField = form[oDate[x][0]];
                    }
                    fields[i++] = oDate[x][1];
                    bValid =  false;
                }
            } else {
                if (i == 0) {
                    focusField = form[oDate[x][0]];
                }
                fields[i++] = oDate[x][1];
                bValid =  false;
            }
        }
    }
    if (fields.length > 0) {
        if (focusField != null) {
            focusField.focus();
        }
        alert(fields.join('\n'));
    }
    return bValid;
}

// validate max length
function validateMaxLength(form) {
    var isValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    oMaxLength = eval('new ' + formName.value + '_maxlength()');
    for (x in oMaxLength) {
        var field = form[oMaxLength[x][0]];

        if (field.type == 'text' ||
        field.type == 'textarea') {

            var iMax = parseInt(oMaxLength[x][2]("maxlength"));
            if (field.value.length > iMax) {
                if (i == 0) {
                    focusField = field;
                }
                fields[i++] = oMaxLength[x][1];
                isValid = false;
            }
        }
    }
    if (fields.length > 0) {
        if (focusField != null) {
            focusField.focus();
        }
        alert(fields.join('\n'));
    }
    return isValid;
}

// Validate Integer
function isAllDigits(argvalue) {
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    if (argvalue.substring(0, 2) == "0x") {
        validChars = "0123456789abcdefABCDEF";
        startFrom = 2;
    } else if (argvalue.charAt(0) == "0") {
        validChars = "01234567";
        startFrom = 1;
    } else if (argvalue.charAt(0) == "-") {
        startFrom = 1;
    }

    for (var n = startFrom; n < argvalue.length; n++) {
        if (validChars.indexOf(argvalue.substring(n, n+1)) == -1) return false;
    }
    return true;
}

function validateInteger(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    oInteger = eval('new ' + formName.value + '_IntegerValidations()');
    for (x in oInteger) {
        var field = form[oInteger[x][0]];

        if (field.type == 'text' ||
        field.type == 'textarea') {

            var value = field.value;


            if (value.length > 0) {

                if (!isAllDigits(value)) {
                    bValid = false;
                    if (i == 0) {
                        focusField = field;
                    }
                    fields[i++] = oInteger[x][1];

                } else {
                    var iValue = parseInt(value);
                    /* || !(iValue >= -2147483648 && iValue <= 2147483647) */
                    if (isNaN(iValue)) {
                        if (i == 0) {
                            focusField = field;
                        }
                        fields[i++] = oInteger[x][1];
                        bValid = false;
                    }
                }
            }
        }
    }
    if (fields.length > 0) {
        if (focusField != null) {
            focusField.focus();
        }
        alert(fields.join('\n'));
    }
    return bValid;
}

function validateTwoFields(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    oTwoFields = eval('new ' + formName.value + '_twofields()');

    for (x in oTwoFields) {
        var field = form[oTwoFields[x][0]];
        var secondField = form[oTwoFields[x][2]("secondProperty")];

        if (field.type == 'text' ||
        field.type == 'textarea' ||
        field.type == 'password') {

            var value = field.value;;
            var secondValue = secondField.value;

            if (value != secondValue) {
                focusField = field;
                fields[i++] = oTwoFields[x][1];
                bValid = false;
            }
        }
    }

    if (fields.length > 0) {
        if (focusField != null) {
            focusField.focus();
        }
        alert(fields.join('\n'));
    }
    return bValid;
}

function validateEmail(form) {
    var bValid = true;
    var focusField = null;
    var i = 0;
    var fields = new Array();
    var formName = form.getAttributeNode("name");
    oEmail = eval('new ' + formName.value + '_email()');

    for (x in oEmail) {
        if ((form[oEmail[x][0]].type == 'text' ||
        form[oEmail[x][0]].type == 'textarea') &&
        (form[oEmail[x][0]].value.length > 0)) {
            if (!checkEmail(form[oEmail[x][0]].value)) {
                if (i == 0) {
                    focusField = form[oEmail[x][0]];
                }
                fields[i++] = oEmail[x][1];
                bValid = false;
            }
        }
    }
    if (fields.length > 0) {
        if (focusField != null) {
            focusField.focus();
        }
        alert(fields.join('\n'));
    }
    return bValid;
}

/**
* Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
* http://javascript.internet.com
*/
function checkEmail(emailStr) {
    if (emailStr.length == 0) {
        return true;
    }
    var emailPat=/^(.+)@(.+)$/;
    var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
    var validChars="\[^\\s" + specialChars + "\]";
    var quotedUser="(\"[^\"]*\")";
    var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
    var atom=validChars + '+';
    var word="(" + atom + "|" + quotedUser + ")";
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
    var matchArray=emailStr.match(emailPat);
    if (matchArray == null) {
        return false;
    }
    var user=matchArray[1];
    var domain=matchArray[2];
    if (user.match(userPat) == null) {
        return false;
    }
    var IPArray = domain.match(ipDomainPat);
    if (IPArray != null) {
        for (var i = 1; i <= 4; i++) {
            if (IPArray[i] > 255) {
                return false;
            }
        }
        return true;
    }
    var domainArray=domain.match(domainPat);
    if (domainArray == null) {
        return false;
    }
    var atomPat=new RegExp(atom,"g");
    var domArr=domain.match(atomPat);
    var len=domArr.length;
    if ((domArr[domArr.length-1].length < 2) ||
    (domArr[domArr.length-1].length > 3)) {
        return false;
    }
    if (len < 2) {
        return false;
    }
    return true;
}

function setValue(id, value) {
	var e = document.getElementById(id);
	if (e != null) {
		e.value = value;
	}
}

function initButtonHover() {
    var buttons = document.getElementsByTagName("input");
    for (i=0; i < buttons.length; i++) {
  		if (buttons[i].type == "submit" || buttons[i].type=="reset" || buttons[i].type=="button" ) {
          	buttons[i].className = "hbuttons";
  		}
    }
}

function enableButtonHover() {
    var previousClass = null;
    var buttons = document.getElementsByTagName("input");
    for (i=0; i < buttons.length; i++) {
  		if (buttons[i].type == "submit" || buttons[i].type=="reset" || buttons[i].type=="button" ) {
          	buttons[i].onmouseover = function() {
  				previousClass=this.className;
  				this.className +='_hover';
  			};
          	buttons[i].onmouseout = function() { this.className=previousClass };
  		}
    }
}

function initPage() {
    initButtonHover();
    enableButtonHover();
}

function changebgcolor(element, color) {
    element.bgcolor = color;
}

function replace(s, o, n) {
    var r = "";
    var start = -1;
    var end = 0;
    while ((start = s.indexOf(o, end)) != -1) {
        r += s.substring(end, start);
        r += n;
        end = start + o.length;
    }
    if (end <= s.length - 1) {
        r += s.substring(end);
    }
    return r;
}

function checkNumberInput() {
    var code = window.event.keyCode;
	if (code < 45 || code > 57) {
		window.event.returnValue = false;
	}
	return true;
}
function uncheckTitle(checkbox,titleCheckboxId){
	var titleCheckbox = document.getElementById(titleCheckboxId);
	if(!checkbox.checked){
		titleCheckbox.checked = false;
	}else{//if all checked, check title
		if(isAllChecked(checkbox.name)){
			titleCheckbox.checked = true;
		}
	}
}
function selectMenuParentChanged(parentId,childId){
	var parent = document.getElementById(parentId);
	var child  = document.getElementById(childId);
	
	if(parent == null || child == null){
		return;
	}
	var selectedArray;
	if(parent.value == ""){
		selectedArray = eval("x_" + "null" + "Array"); 
	} else {
		selectedArray = eval("x_"+ parent.value + "Array");
	}
	while (selectedArray.length < child.options.length) {
		child.options[(child.options.length - 1)] = null;
	}	
	for (var i=0; i < selectedArray.length; i++) {
		eval("child.options[i] = " + "new Option" + selectedArray[i]);
	}
}














