try{if(!lang)lang="en";}catch(e){lang="en";}
try{if(!root)root="/app";}catch(e){root="/app";}

function changeLocale(locale) {
	var url = location.href;
    var poundPos = url.indexOf("#");
    if (poundPos > -1) {
        url = url.substring(0, poundPos);
    }
	var regex = /(\?.*?)\blang\b=.*?(&|$.*)/;
	if(regex.test(url)) {
		url = url.replace(regex, "$1lang=" + locale + "$2");
	} else {
		if(url.indexOf("?") == -1) {
			url += "?";
		} else {
			url += "&";
		}
		url += "lang=" + locale;
	}
	location.href = url;
}

function validEmail(email) {
    if(email) return /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(email);
    else return false;
}

function stringReplacement(string) {
    if(string == null) return null;
    var regex = /\{(\d+)\}/g;
    var args = arguments;
    string = string.replace(regex, function(match,$1) {return args[eval($1)+1];});
    return string;
}

function submitPostalCode(form) {
	if (form.postalCode.value) {
		form.postalCode.value = form.postalCode.value.toUpperCase();
	}
    var pc = form.postalCode.value.replace(/\s*/g, "");
    if(pc.length == 6) {
        form["preferredDealer.address.postalCode.part1"].value = pc.substring(0,3);
        form["preferredDealer.address.postalCode.part2"].value = pc.substring(3);
        return true;
    } else {
        return false;
    }
}

function tryWhenAvailable(func) {
    try {
        eval(func).apply(this);
    } catch(e) {
        setTimeout(function() {tryWhenAvailable(func);}, 500);
    }
}

function show(layer_ref)
    {
        document.getElementById(layer_ref).style.display = "block";
    }

var blackout;
function getBlackout()
	{
		if(!blackout) blackout = document.getElementById("blackout");
		return blackout;
	}
function showBlackout(layer_ref)
	{
		var blk = getBlackout();
		addClass(blk, "blk__" + layer_ref + "__out");
		blk.style.display = "block";
        var promo = document.getElementById("rotatingpromo");
        if(promo) promo.style.display = "none";
	}
function hideBlackout(layer_ref)
	{
		var blk = getBlackout();
		removeClass(blk, "blk__" + layer_ref + "__out");
		if(blk && !/blk__[^\s]*__out/.test(blk.className)) {
			blk.style.display = "none";
		}
		var closeRP = document.getElementById("rotatingpromo");
		if (closeRP) { document.getElementById("rotatingpromo").style.display = "block"; }
	}

function showOverlay(page, method)
	{
		var overlay = "overlay";
		showBlackout(overlay);
		show(overlay);
		ahah(page,overlay,{method:method});

	}

function showLoader(){
	show("blackoutLoader");
}
function hideLoader(){
	hide("blackoutLoader");	
}

function ahahDone(req,target,props) {
   // only if req is "loaded"
   if (req.readyState == 4) {
        var elem = document.getElementById(target);
       // only if "OK"
       if (req.status == 200 || req.status == 304) {
           results = req.responseText;
           elem.innerHTML = results;
           if(props.onComplete) props.onComplete.apply(elem, [req]);
       } else {
           addClass(elem, "ahahError");
           elem.innerHTML="ahah error:\n" + req.statusText;
           if(props.onError) props.onError.apply(elem, [req]);
       }
   }
}

function ahah(url,target,props) {
    if(!props) props = {};
    if(!props.method) props.method = "GET";
    document.getElementById(target).innerHTML = '<img src=/images/loading.gif>';
    if (window.XMLHttpRequest) {
        var req = new XMLHttpRequest(req);
        req.onreadystatechange = function() {ahahDone(req,target,props);};
        req.open(props.method, url, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        var req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = function() {ahahDone(req,target,props);};
            req.open(props.method, url, true);
            req.send();
        }
    }
}
//BEGIN FUNCTIONS TO USE IF JQUERY ISN'T AVAILABLE

function hasClass(elem, className) {
    if(!elem) return false;
    if(!className) return true;
	var regex = new RegExp("\\b" + className + "\\b");
	return regex.test(elem.className);
}

function addClass(elem, className) {
    if(!elem || !className) return;
	if(!elem.className) elem.className = className;
	if(!hasClass(elem, className)) elem.className += " " + className;
}

function removeClass(elem, className) {
    if(!elem || !className) return;
	var regex = new RegExp("\\b" + className + "\\b");
	elem.className = elem.className.replace(regex, "");
}

function serialize(form) {
    var str = "";
    for(var i=0; i<form.elements.length; i++) {
        var val = getFormElementValue(form.elements[i]);
        if(val) {
            str += "&" + form.elements[i].name + "=" + escape(val);
        }
    }
    if(str.length > 0) {
        return str.substring(1);
    } else {
        return str;
    }
}
function getFormElementValue(elem) {
    switch(elem.tagName) {
        case "INPUT" :
            switch(elem.type) {
                case "button" :
                case "radio" :
                case "checkbox" :
                    return (elem.checked) ? elem.value : null;
                case "text" :
            }
        case "TEXTAREA" :
            return elem.value;
        case "SELECT" :
            if(elem.selectedIndex > -1) {
                return elem.options[elem.selectedIndex].value;
            } else {
                return null;
            }
    }
}


function getX(obj) {
    if(!obj) return 0;
    var curleft = 0;
    if(obj.offsetParent) {
        while(obj.offsetParent) {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    } else if(obj.x) {
        curleft += obj.x;
    }
    return curleft;
}
function getY(obj) {
    var curtop = 0;
    if(obj == null) {
        return 0;
    }
    if(obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    } else if(obj.y) {
        curtop += obj.y;
    }
    return curtop;
}
function getCursorPosition(e) {
    e = e || window.event;
    if(!e) return {x:400,y:400};
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}
// END JQUERY REPLACEMENT FUNCTIONS

function debug(msg) {
    try {
        // Only works if Firebug is installed
        console.log(msg);
    } catch(e) {
        // Outputs to the Javascript shell if open
        if (this.Shell) {
            print(msg);
        } else {
            alert(msg);
        }
    }
}