var eziValidatorRules =
	{
		1 : new Array(
				{"type" : "integer", "max" : 2400, "message" : "Enter width in mm below 2400"},
				{"type" : "integer", "max" : 2400, "message" : "Enter height in mm below 2400"}
			),
		2 : new Array(
				{"type" : "integer", "max" : 2500, "message" : "Enter width in mm below 2500"},
				{"type" : "integer", "max" : 2400, "message" : "Enter height in mm below 2400"}
			)
	};


// DO NOT MAKE ANY CHANGES BELOW THIS POINT

if (window.addEventListener)
	window.addEventListener("load", attachValidator, false);
if (window.attachEvent)
	window.attachEvent("onload", attachValidator);

function attachValidator()
{
	for(var idx = 0; idx < document.forms.length; idx++)
	{
		var frm = document.forms[idx];

		if (/viewcart.(htm|html)$/.test(frm.action))
		{
			if (frm.elements["pid"])
			{
				var pid = parseInt(frm.elements["pid"].value);

				if (!isNaN(pid))
				{
					var rule = eziValidatorRules[pid];

					if (rule)
						attachValidatorRules(frm, rule);
					
					if (frm.onsubmit)
					{
				        frm.validateSubmit = frm.onsubmit;
				        frm.onsubmit = null;
                    }
                    
					eziEventListen(frm, "submit", validateSubmit);
				}
			}
		}
	}
}

function attachValidatorEvent(element, event, fn, rule)
{
    eziEventListen(element, event, function(evt) { return fn(evt, rule) });
}

function attachValidatorRules(frm, rules)
{
	for(var ruleidx = 0; ruleidx < rules.length; ruleidx++)
	{
		var element = frm.elements["cf"];
		var rule = rules[ruleidx];

        if (ruleidx == 0)
        {       
            if (!element.type && element.length)
                element = element[ruleidx];
        }
        else
        {
            if (!element.length)
                break;
                
            element = element[ruleidx];
        }
       
		if (element && rule)
		{		
			switch(element.type.toLowerCase())
			{
			case "text":

				switch(rule["type"])
				{
				case "integer":
				    attachValidatorEvent(element, "change", validateIntegerText, rule);
					break;
				}

				break;				
			}
		}
	}
}

function validateSelect(evt, rule)
{
    var srcElement = eziEventSource(evt);
    
    if (rule && rule["checkvalue"])
    {
        if (srcElement.value == rule["checkvalue"])
        {
            if (rule["message"])
                alert(rule["message"]);
            else
                alert("Please choose a valid selection");
                
           eziEventCancel(evt);                
                
            if (!srcElement.disabled)
                srcElement.focus();
                    
            return false;
        }    
    }
    
    return true;
}

function validateIntegerText(evt, rule)
{
	var srcElement = eziEventSource(evt);
	var intVal = parseInt(srcElement.value);
	var fltVal = parseFloat(srcElement.value);

	if (isNaN(intVal) || intVal != fltVal)
	{
	    if (rule["message"])
	        alert(rule["message"]);
	    else if (isNaN(intVal))
	        alert("Please enter a number");
	    else
		    alert("Please enter a whole number");
		    		    
		eziEventCancel(evt);
		
		if (!srcElement.disabled)
		    srcElement.focus();
		return false;
	}
	
	if (rule["min"] != undefined)
	{
        var minValue = parseInt(rule["min"]);
        
        if (!isNaN(minValue) && minValue > intVal)
        {
		    if (rule["message"])
		        alert(rule["message"]);
		    else
	            alert("Please enter a number greater than " + minValue);
    	    
	        eziEventCancel(evt);
	        
		    if (!srcElement.disabled)
		        srcElement.focus();	 
		        
		    return false;       
        }
    }
    
    if (rule["max"] != undefined)
    {    
        var maxValue = parseInt(rule["max"]);
        
        if (!isNaN(maxValue) && maxValue < intVal)
        {
		    if (rule["message"])
		        alert(rule["message"]);
		    else
	            alert("Please enter a number less than than " + maxValue);
    	    
	        eziEventCancel(evt);
	        
		    if (!srcElement.disabled)
		        srcElement.focus();	 
		        
		    return false; 	        
        }
    }
    
	return true;
}

function validateSubmit(evt)
{
    var frm;

    evt = eziEvent(evt);
    if (!evt)
        return;
        
    frm = eziEventSource(evt);
    
	if (frm.elements["pid"])
	{
		var pid = parseInt(frm.elements["pid"].value);

		if (!isNaN(pid))
		{
			var rules = eziValidatorRules[pid];

			if (rules)
            {
                for(var idx = 0; idx < rules.length; idx++)
                {
                    var element = frm.elements["cf"];
                    var rule = rules[idx];
                    
                    if (idx == 0)
                    {       
                        if (!element.type && element.length)
                            element = element[idx];
                    }
                    else
                    {
                        if (!element.length)
                            break;
                            
                        element = element[idx];
                    }                    
                    
			        switch(element.type.toLowerCase())
			        {
			        case "text":

				        switch(rule["type"])
				        {
				        case "integer":
				            if (!validateIntegerText({"target" : element}, rule))
				            {
                                eziEventCancel(evt);
                                return false;
				            }
					        break;
				        }

				        break;
				        
				    case "select-one":
				    case "select-multiple":
				        if (!validateSelect({"target" : element}, rule))
				        {
				            eziEventCancel(evt);
				            return false;
				        }
				        
				        break;
			        }                    
                }
            }
		}
	}    

    if (frm.validateSubmit)
        frm.validateSubmit();
}

function eziEventListen(obj, eventName, fn)
{
    if (obj.addEventListener)
        obj.addEventListener(eventName, fn, false);
    else if (obj.attachEvent)
        obj.attachEvent("on" + eventName, fn);        
}

function eziEvent(evt)
{
    if (evt)
        return evt;
        
    return windows.event;
}

function eziEventCancel(evt)
{
    if (evt.preventDefault)
    {
        if (evt.stopPropagation)
            evt.stopPropagation();
        evt.preventDefault();
    }
    else if (evt.returnValue)
    {
        if (evt.hasOwnProperty("cancelBubble"))
            evt.cancelBubble = true;
        evt.returnValue = false;
    }
}

function eziEventSource(evt)
{
    if (evt.target)
        return evt.target;
        
    if (evt.srcElement)
        return evt.srcElement;
}
