/// <reference path="../functions.js" />

Array.prototype.indexOf = function Array$indexOf(el) { for (var i = 0; i < this.length; i++) { if (this[i] === el) return i; } return -1; };
Array.prototype.contains = function Array$contains(el) { return this.indexOf(el) != -1; };
Array.prototype.search = function Array$search(test, predicate) { for (var i = 0; i < this.length; i++) { if (predicate(this[i], test)) return i; } return -1; };
Array.prototype.lookup = function Array$search(prop, value) { for (var i = 0; i < this.length; i++) { if (this[i]!=null && (this[i][prop]===value)) return i; } return -1; };
Array.from = function Array$from(coll)
{
	var result = [];
	if (typeof coll.length == "number")
		for (var i = 0; i < coll.length; i++) result.push(coll[i]);
	else
		for (var prop in coll) result.push(coll[prop]);
	return result;
}
Object.extend = function Object$extend(o1, o2) { for (var prop in o2) o1[prop] = o2[prop]; return o1; }
Function.prototype.bind = function(t, args)
{
	var f = this;
	return function() { return f.apply(t, args); };
}
function hasClassName(el, className)
{
	return el.className.split(" ").contains(className);
}
function addClassName(el, className)
{
	//var x=[];for (var p in el){x.push(p)};alert(x.join("\n"));	
	var classes = (el.className ? el.className.split(" ") : []);
	if (!classes.contains(className))
	{
		classes.push(className);
		el.className = classes.join(" ");
		return true;
	}
	return false;
}
function removeClassName(el, className)
{
	var classes = (el.className ? el.className.split(" ") : []);
	var i = classes.indexOf(className);
	if (i != -1)
	{
		classes.splice(i, 1);
		el.className = classes.join(" ");
		return true;
	}
	return false;
}
function getEventElement(e, tagName)
{
	if (!e) e = window.event;
	var el = e.currentTarget;
	if (!el)
	{
		el = e.srcElement;
		if (tagName)
		{
			tagName = tagName.toLowerCase();
			while (el.tagName.toLowerCase() != tagName) el = el.parentNode;
		}
	}
	return el;
}

function addEvent(el, event, fn)
{
	if (el.addEventListener)
		el.addEventListener(event, function() { fn.apply(el, arguments); }, true);
	else
		el.attachEvent("on" + event, function() { fn.apply(el, arguments); });
}
function simulateClick(el)
{
	if (document.createEvent)
	{
		var evt = document.createEvent("MouseEvents");
		evt.initMouseEvent("click", true, true, window,
		0, 0, 0, 0, 0, false, false, false, false, 0, null);
		el.dispatchEvent(evt);
	}
	else if (el.fireEvent)
	{
		el.fireEvent("onclick");
	}

}
function getParent(el, tagName)
{
	tagName = tagName.toLowerCase();
	while (el.tagName.toLowerCase() != tagName) { el = el.parentNode; }
	return el;
}
function getForm(el)
{
	return getParent(el, 'form');
}
function submitForm(el)
{
	return getForm(el).submit();
}
function loadScript(src, loadCondition, cb)
{
	var scriptEl = document.createElement("script");
	scriptEl.type = "text/javascript";
	scriptEl.src = src;
	scriptEl.onload = scriptEl.onreadystatechange = function()
	{
		if (loadCondition)
		{
			var e; try { if (!loadCondition()) throw 1; } catch (e) { return; } // check is script loaded in ie 
		}
		scriptEl.onload = scriptEl.onreadystatechange = null;
		cb();
	}
	var parentEl = document.getElementsByTagName('html');
	if (!parentEl || parentEl.length == 0)
		parentEl = document.body;
	else
		parentEl = parentEl[0];
	parentEl.appendChild(scriptEl);
}
// based on code Developed by Robert Nyman, http://www.robertnyman.com
// Code/licensing: http://code.google.com/p/getelementsbyclassname/
function matchesAnyRegexp(s, res)
{
	for (var i = 0; i < res.length; i++)
		if (res[i].test(s))
		return i;
	return -1;
}
var getElementsByClassName;
if (document.getElementsByClassName)
{
	getElementsByClassName = function(className, tagName, root)
	{
		root = root || document;
		var els = root.getElementsByClassName(className);
		if (!tagName) return els;
		var tagNameRegExp = new RegExp("\\b" + tagName + "\\b", "i"), result = [], el;
		for (var i = 0, count = els.length; i < count; i++)
		{
			el = els[i];
			if (tagNameRegExp.test(el.nodeName))
				result.push(el);
		}
		return result;
	};
}
else if (document.evaluate)
{
	getElementsByClassName = function(className, tagName, root)
	{
		tagName = tagName || "*";
		root = root || document;
		var classes = className.split(" "),
			xpath = [".//", tagName],
			xhtmlNamespace = "http://www.w3.org/1999/xhtml",
			namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace : null,
			result = [], els, el;
		for (var j = 0, count = classes.length; j < count; j++)
			xpath.push("[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]");
		xpath = xpath.join("");
		try
		{
			els = document.evaluate(xpath, root, namespaceResolver, 0, null);
		}
		catch (e)
		{
			els = document.evaluate(xpath, root, null, 0, null);
		}
		while (el = els.iterateNext())
			result.push(el);
		return result;
	};
}
else
{
	getElementsByClassName = function(className, tagName, root)
	{
		tagName = tagName || "*";
		root = root || document;
		var classes = className.split(" "),
			classesRegExps = [],
			els = (tagName === "*" && root.all) ? root.all : root.getElementsByTagName(tagName),
			current,
			result = [],
			match, i, j, count, classCount = classes.length;
		for (i = 0; i < classCount; i++)
			classesRegExps.push(new RegExp(["(?:^|\\s)", classes[i], "(?:\\s|$)"].join("")));

		for (i = 0, count = els.length; i < count; i++)
		{
			el = els[i];
			if (matchesAnyRegexp(el.className, classesRegExps) != -1)
				result.push(el);
		}
		return result;
	}
}



var Kwizcom = {};

Kwizcom.General = {
    EventHandlers: {
        window_onload: function () {

            // Attach events to .hoverable elements
            var els = getElementsByClassName('hoverable');
            var handlers = { over: Kwizcom.General.EventHandlers.hoverable_over, out: Kwizcom.General.EventHandlers.hoverable_out };
            for (var i = 0; i < els.length; i++) {
                var el = els[i];

                // don't make hoverable twice
                if (el.hoverableEvents) continue;
                el.hoverableEvents = true;

                addEvent(el, 'mouseover', handlers.over);
                addEvent(el, 'mouseout', handlers.out);
                addEvent(el, 'focus', handlers.over);
                addEvent(el, 'blur', handlers.out);

                if (el.getElementsByTagName("img").length > 0) {
                    var doubleBuffer = document.createElement("span");
                    doubleBuffer.className = 'double-buffer';
                    el.appendChild(doubleBuffer);
                }
            }

            // Make External Links Popup
            var externalLinks = getElementsByClassName("external", "a");
            //var external_link_click_func = function() { window.open(this.href, "_blank"); return false; };
            for (var i = 0; i < externalLinks.length; i++) {
                var link = externalLinks[i];
                link.target = "_blank";
                if (link.title)
                    link.title = link.title + " (opens in a new window)";
                else
                    link.title = link.innerHTML + " (opens in a new window)";
            }

            // Add .first and .last class names to list items
            var lists = Array.from(document.getElementsByTagName("ol")).concat(Array.from(document.getElementsByTagName("ul")));
            for (var i = 0; i < lists.length; i++) {
                var items = lists[i].getElementsByTagName("li");
                if (items.length) {
                    addClassName(items[0], "first");
                    addClassName(items[items.length - 1], "last");
                }
            }

            try {
                document.getElementById('button-select-product').onclick = Kwizcom.General.EventHandlers.go_to_product_onclick;
            }
            catch (e) {
            }

        },
        go_to_product_onclick: function () {
            var form = getForm(this);
            var url = form.elements['select-product'].value;
            if (url && url.length) document.location.href = url;
            return false;
        },
        recaptcha_onload: function () {
            document.getElementById(RecaptchaOptions.custom_theme_widget).style.display = "block";
            document.getElementById(RecaptchaOptions.custom_theme_widget_loading).style.display = "none";
        },
        form_feedback_input_onfocus: function () {
            var widget = document.getElementById(RecaptchaOptions.custom_theme_widget);
            if (!widget.created) {
                document.getElementById(RecaptchaOptions.custom_theme_widget_loading).style.display = "block";
                setTimeout(function () {
                    loadScript("http://api.recaptcha.net/js/recaptcha_ajax.js", function () { return !!Recaptcha.create }, function () {
                        Recaptcha.create(RecaptchaOptions.public_key, RecaptchaOptions.custom_theme_widget, RecaptchaOptions);
                    });
                }, 1);

                widget.created = true;
            }
        },
        liveHelp_statuschanged: function (status) {
            if (psi7l8cl != status) {
                var d = document.getElementById('psi7l8l');
                if (d != null) {
                    d.innerHTML = status;
                }
                psi7l8cl = status;
                Kwizcom.General.Functions.setLiveHelpStatus(status);
            }
        },
        element_toggleVisibility: function (toggler, togglee, toggledClass) {
            var toggler = $id(toggler);
            var togglee = $id(togglee);

            if (hasClassName(toggler, toggledClass)) {
                removeClassName(togglee, toggledClass);
                removeClassName(toggler, toggledClass);
            }
            else {
                addClassName(togglee, toggledClass);
                addClassName(toggler, toggledClass);
            }
        },
        hoverable_over: function Kwizcom$General$EventHandlers$hoverable_over() {
            var classes = this.className.split(" ");
            for (var i = 0; i < classes.length; i++) {
                if ((classes[i].indexOf("-over") == -1) && (!["hoverable", "over"].contains(classes[i])))
                    classes.push(classes[i] + "-over");
            }
            if (!classes.contains("over"))
                classes.push("over");
            this.className = classes.join(" ");
        },
        hoverable_out: function Kwizcom$General$EventHandlers$hoverable_out() {
            var classes = this.className.split(" ");
            var i;
            for (i = classes.length - 1; i >= 0; i--) {
                if (classes[i].indexOf("-over") != -1)
                    classes.splice(i, 1);
            }
            if ((i = classes.indexOf("over")) != -1)
                classes.splice(i, 1);
            this.className = classes.join(" ");

        }
    },
    Functions:
	{
	    setLiveHelpStatus: function (status) {
	        var online = (status.toLowerCase() == "online");
	        var elementIds = ["navbar-button-live-help", "help-chat-button", "chat-online-button"];

	        var elements = [];
	        for (var i = 0; i < elementIds.length; i++) {
	            var el = document.getElementById(elementIds[i]);
	            if (el)
	                elements.push(el);
	        }

	        for (var i = 0; i < elements.length; i++) {
	            removeClassName(elements[i], online ? "live-help-offline" : "live-help-online");
	            addClassName(elements[i], online ? "live-help-online" : "live-help-offline");
	            elements[i].title = online ? "Live Help Chat Service is Online" : "Live Help Chat is Currently Offline";
	        }
	    }
	},
    PageProcessingEvents: {
        form_feedback_onload: function (form) {
            for (var i = 0; i < form.elements.length; i++) {
                var el = form.elements[i];
                if (el.type != "hidden") {
                    el.onfocus = Kwizcom.General.EventHandlers.form_feedback_input_onfocus;
                }
            }
        },
        navbar_onload: function () {

            var navbar = document.getElementById("header-navbar");
            var navbarItems = navbar.getElementsByTagName("li");
            for (var i = 0; i < navbarItems.length; i++) {
                var navbarItem = navbarItems[i];
                if (navbarItem.parentNode == navbar) {
                    var uls = navbarItem.getElementsByTagName("ul");
                    if (uls.length != 0) // only if a submenu exists
                    {
                        var submenu = uls[0];
                        var submenuItems = uls[0].getElementsByTagName("li");
                        if (submenuItems.length) {
                            addClassName(submenuItems[0], "first");
                            addClassName(submenuItems[submenuItems.length - 1], "last");
                        }

                        addEvent(navbarItem, "mouseover", Kwizcom.General.EventHandlers.hoverable_over);
                        addEvent(navbarItem, "mouseout", Kwizcom.General.EventHandlers.hoverable_out);
                        addEvent(navbarItem, "focus", Kwizcom.General.EventHandlers.hoverable_over);
                        addEvent(navbarItem, "blur", Kwizcom.General.EventHandlers.hoverable_out);
                    }

                }
            }

            var sei7l8 = document.createElement("script");
            sei7l8.type = "text/javascript";
            var sei7l8s = (location.protocol.indexOf("https") == 0 ? "https://secure.providesupport.com/image" : "http://image.providesupport.com") + "/js/kwizcom/safe-textlink.js?ps_h=i7l8\u0026ps_t=" + new Date().getTime() + "\u0026online-link-html=Online\u0026offline-link-html=Offline";
						setTimeout(function () {
				    	sei7l8.src = sei7l8s;

						  document.getElementById('sdi7l8').appendChild(sei7l8);
						  var timer, event;
						  event = function () {
						      psi7l8sl = Kwizcom.General.EventHandlers.liveHelp_statuschanged;
						      Kwizcom.General.Functions.setLiveHelpStatus(psi7l8cl);
						  };
						  timer = setInterval(function () { if (document.getElementById("psi7l8l")) { event(); clearInterval(timer); } }, 100);
					  }, 1);
				    // sei7l8.onload = event;


        }
    }
}


addEvent(window, 'load', Kwizcom.General.EventHandlers.window_onload);

