var selectTags = null;

Utils = function () {

};

/// detect a special case of "web browser"
Utils.is_ie = ( /msie/i.test(navigator.userAgent) &&
		   !/opera/i.test(navigator.userAgent) );

Utils.is_ie5 = ( Utils.is_ie && /msie 5\.0/i.test(navigator.userAgent) );

/// detect Opera browser
Utils.is_opera = /opera/i.test(navigator.userAgent);

/// detect KHTML-based browsers
Utils.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);

Utils.addEvent = function(el, evname, func) {

	if (el==null) return;

	if (el.attachEvent) { // IE
		el.attachEvent("on" + evname, func);
	} else if (el.addEventListener) { // Gecko / W3C
		el.addEventListener(evname, func, true);
	} else {
		el["on" + evname] = func;
	}
};

Utils.removeEvent = function(el, evname, func) {

	if (el==null) return;

	if (el.detachEvent) { // IE
		el.detachEvent("on" + evname, func);
	} else if (el.removeEventListener) { // Gecko / W3C
		el.removeEventListener(evname, func, true);
	} else {
		el["on" + evname] = null;
	}
};

Utils.selectRange = function(ele, start, end)
{

	if (ele == null) return;

	if (ele.setSelectionRange){
	
		ele.setSelectionRange(start, end);
	}
	else if (ele.createTextRange){
		var range = ele.createTextRange();
		range.moveStart("character", start);
		range.moveEnd("character", end - ele.value.length);
		range.select();
	}

	ele.focus();
};

Utils.getCookie = function(Name) {
	var search=Name+"=";
	var returnvalue="";
	if(d.cookie.length>0){
		offset=d.cookie.indexOf(search);
		if(offset!=-1){
			offset+=search.length;
			end=d.cookie.indexOf(";",offset);
			if(end==-1)end=d.cookie.length;
			returnvalue=unescape(d.cookie.substring(offset,end));
		}
	}
	return returnvalue;
}

Utils.trim = function(value){

	var number = 1000;

	if (value == null || value.length == 0) return value;
	
	while (value.substring(0, 1) == ' ' && number > 0){
		value = value.substring(1);
		number = number - 1;
	}
	
	if (value == null || value.length == 0) return value;
	
	while (value.substring(value.length-1, value.length) == ' ' && number > 0){
		value = value.substring(0, value.length - 1);
		number = number - 1;
	}	

	return value;
}

function SetValue(oSender, oValue)
{

	var ob = document.getElementById(oSender);
	if (ob.tagName == 'INPUT') ob.value = oValue;
	else {
		ob.innerText = oValue;
	}
}


function NumericKeysOnly()
{
    var str = String.fromCharCode( window.event.keyCode );
    
    if ( String(",.0123456789").indexOf(str) > -1 )
        return true;
    else
        return false;
}

function DigitKeysOnly()
{
    var str = String.fromCharCode( window.event.keyCode );
    
    if ( String("0123456789").indexOf(str) > -1 )
        return true;
    else
        return false;
}

function TextKeysOnly()
{
    var str = String.fromCharCode( window.event.keyCode );
    var objRegExp  = /^[A-Za-z' ]$/;    
    
    if ( objRegExp.test(str) )
        return true;
    else
        return false;
}

function TextKeysOnly2()
{
    var str = String.fromCharCode( window.event.keyCode );
    var objRegExp  = /^[A-Za-z0-9]$/;    
    
    if ( objRegExp.test(str) )
        return true;
    else
        return false;
}

Utils.inputPrice = function()
{
    var str = String.fromCharCode( window.event.keyCode );
    
    if ( String(".0123456789").indexOf(str) > -1 )
        return true;
    else
        return false;
}

Utils.inputDate = function()
{
    var str = String.fromCharCode( window.event.keyCode );
    
    if ( String(".0123456789\/ ").indexOf(str) > -1 )
        return true;
    else
        return false;
}


    function moreText(objId, buttonId) {
	
	var obj = document.getElementById(objId);

	if (obj==null) return;

	obj.style.display ="";

	var but = document.getElementById(buttonId);

	if (but==null) return;

	but.style.display ="none";


   }


    function lessText(objId, buttonId) {
	
	var obj = document.getElementById(objId);

	if (obj==null) return;

	obj.style.display ="none";

	var but = document.getElementById(buttonId);

	if (but==null) return;

	but.style.display ="";


   }

function ShowHideMoreBlock(display, objId, moreLink, lessLink) {
	var obj = document.getElementById(objId);
	var more = document.getElementById(moreLink);
	var less = document.getElementById(lessLink);
	if (obj==null || more==null || less==null) return;
	obj.style.display = display;
	//for (i=0; i < obj.childNodes.length; i++) {
		//if (obj.childNodes[i].nodeName.toUpperCase()=="LI" && obj.childNodes[i].className == "liMore") {
			//obj.childNodes[i].style.display = display;
		//}
	//}
	
	if (display == "none") {
		more.style.display =less.style.display;
		less.style.display ="none";
	} else {
		more.style.display ="none";
		less.style.display =display;
	}
	
}
function Add(id, qtyName) {
	formObj = document.getElementById('formAddToCart');
	prodObj = document.getElementById('prodId');
	prodQtyObj = document.getElementById(qtyName);
	qtyObj = document.getElementById('qty');
	if (formObj == null || prodObj == null || qtyObj == null || prodQtyObj == null || id <= 0) return;
	prodObj.value = id;
	qtyObj.value = prodQtyObj.value;
	formObj.submit();
}

/*  */
function getElementsByClass(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;
}

function AddAccess(id) {
	var l = document.getElementById(id);
	if (l == null) return;
	var prods = getElementsByClass("Access", l, "input");
	if (prods.length < 1) return;
	var strProds = "";
	for (i=0; i < prods.length; i++) 
	{
		if (prods[i].type == "checkbox" && prods[i].checked){
		    if (strProds == '')
		    {
		        strProds = prods[i].id
		    } else {
		        strProds = strProds+','+ prods[i].id;
		        
		    }
		    prods[i].checked = false;
		}
	}
	evAddToCart(1, strProds);
}

function GetDecimal(s) {
    var re = /,/g;
    if (s.indexOf(".") > 0) {
		s = s.replace(re, "");
	} else {
		s = s.replace(re, ".");
	}
	return s;
}

function CheckPriceRange(minPriceObj, maxPriceObj) {
    var minPrice = minPriceObj.value;
    var maxPrice = maxPriceObj.value;
    //var ref = /^[0-9]+?([\.,]?[0-9]+)$/;
    var ref = /^[0-9]{0,100}?[\.,]?[0-9]+$/;
    if (minPrice != "") {
		if (!ref.test(minPrice)){
            return false;
		}
		minPrice = GetDecimal(minPrice);
        if (isNaN(parseFloat(minPrice))) {
            return false;
        }
    }
    if (maxPrice != "") {
		if (!ref.test(maxPrice)){
            return false;
		}
		maxPrice = GetDecimal(maxPrice);
        if (isNaN(parseFloat(maxPrice))) {
            return false;
        }
    }

    minPrice = parseInt(minPrice, 10);
    maxPrice = parseInt(maxPrice, 10);
    
    if (minPrice > maxPrice && maxPrice > 0) {
        return false;
    }
	return true;
}


var MAX_DUMP_DEPTH = 10;

function dump(obj, name, indent, depth) {
	if (depth > MAX_DUMP_DEPTH) {
		return indent + name + ": <Maximum Depth Reached>\n";
	}
	if (depth < 0) {
		return indent + name + ": <Maximum Depth Reached>\n";
	}
	if (typeof obj == "object") {
		var child = null;
		var output = indent + name + "\n";
		indent += "\t";
		for (var item in obj) {
			try {
				child = obj[item];
			} catch (e) {
			child = "<Unable to Evaluate>";
			}
			//if (typeof child == "object") {
			//	output += dump(child, item, indent, depth - 1);
			//} else {
				output += indent + item + ": " + child + "\n";
			//}
		}
		return output;
	} else {
		return obj;
	}
}

function ShowHideSearchBlock(titleId, blockId, titleShowCss, titleHideCss) {
	var title = document.getElementById(titleId);
	var block = document.getElementById(blockId);
	if (block.style.display == "" || block.style.display == "block") {
		title.className = titleHideCss;
		block.style.display ="none";
		SetSearchBlockCookie(blockId, "none");
	} else {
		title.className = titleShowCss;
		block.style.display ="block";
		SetSearchBlockCookie(blockId, "block");
	}
}

function SetSearchBlockCookie(id, val) {
	expireDate = new Date;
	expireDate.setMonth(expireDate.getMonth()+1);
	SetCookie(id, val, expireDate);
}


function getCookieVal (offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
		endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie (name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return getCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break; 
	}
	return null;
}  
function SetCookie (name, value) {
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	document.cookie = name + "=" + escape (value) +
		((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");
}
function basketDelete(id) {
    var prod = document.getElementById("prodId_" + id);
    var form = document.getElementById("basketForm");
    if (prod != null && form != null){
        prod.value = 0;
        form.submit();
    }
}

//***Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
//***e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis,false);

function AttachEvent(obj,evt,fnc,useCapture){
	if (!useCapture) useCapture=false;
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,useCapture);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
	else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
	}
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}

function ShowHideMoreLessBlock(display, objId, moreLink, lessLink) {
	var obj = document.getElementById(objId);
	var more = document.getElementById(moreLink);
	var less = document.getElementById(lessLink);
	if (obj==null || more==null || less==null) return;
	//obj.style.display = display;
	
    var liArr = obj.getElementsByTagName('li');
    for(var i = 0; i < liArr.length; i++)
    {
      if(display == 'none' && i >= 6)
        liArr[i].className = 'liMore';
      else
        liArr[i].className = '';  
    }
	//for (i=0; i < obj.childNodes.length; i++) {
		//if (obj.childNodes[i].nodeName.toUpperCase()=="LI" && obj.childNodes[i].className == "liMore") {
			//obj.childNodes[i].style.display = display;
		//}
	//}
	
	if (display == "none") {
		more.style.display =less.style.display;
		more.focus();
		less.style.display ="none";
	} else {
		more.style.display ="none";
		less.style.display =display;
	}
	
}

//Checks to see if the element has the specified class name.
function HasCSSClass(element, className) {
    return new RegExp('\\b'+className+'\\b').test(element.className)
}

//Add a class to the element without duplicating it
function AddCSSClass(element, className) {
    if(!HasCSSClass(element,className)){element.className+=element.className?' '+className:className;};
}

//Remove a class from the element
function RemoveCSSClass(element, className) {
    var rep=element.className.match(' '+className)?' '+className:className;
    element.className=element.className.replace(rep,'');
}

// Replace one class with another 
function ReplaceCSSClass(element, currentClass, newClass) {
    element.className=!HasCSSClass(element,currentClass)?element.className.replace(newClass,currentClass):element.className.replace(currentClass,newClass);
}
