// page init
jQuery(function () {
    clearInputs();
    initNav();
    initcrowlLine();
    initCustomForms();
    initOpenClose();
    initStoreDirectoryWidget();
    initAdminLayout();
});

// Checks if browser is in apple mobile device. ie. iPad, iPhone or iPod
function isAppleMobileDevice() {
    return (
        (navigator.userAgent.match(/iPad/i) != null) ||
		(navigator.platform.indexOf("iPhone") != -1) ||
        (navigator.platform.indexOf("iPod") != -1)
    );
}

// Adds class to content to make page area full width for admin pages
function initAdminLayout() {
    if ($('.admin').length > 0)
        $('#content').addClass('full-admin-width');
}


// Updates the store directory drop down
function initStoreDirectoryWidget() {
    $('.store-directory-filter input:radio').change(function () {
        if ($(this).attr('checked')) {
            var parent = $(this).closest('fieldset');
            var dropDown = parent.find('select');

            $.ajax({ type: "POST",
                url: storeDirectoryWebService + '/PopulateCategoriesFilter',
                data: '{ "categoryType": "' + $(this).val() + '" } ',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data, status) {
                    dropDown.find('option').remove();
                    for (var i = 0; i < data.d.length; i++) {
                        dropDown.append('<option value="' + data.d[i].Id + '">' + data.d[i].Name + '</option>');
                    }
                    refreshCustomForms();
                },
                error: function (request, status, error) {
                    alert(request.statusText);
                }
            });
        }
    });
}

// clear inputs
function clearInputs() {
    clearFormFields({
        clearInputs: true,
        clearTextareas: true,
        passwordFieldText: true,
        addClassFocus: "focus",
        filterClass: "default"
    });
};

// crawl line init
function initcrowlLine() {
    jQuery('div.line div.holder').crawlLine({
        speed: 1
    });
};

// nav init
function initNav() {
    var nav = jQuery('#nav');
    var navW = nav.outerWidth();
    nav.find('>li').each(function () {
        var item = jQuery(this);
        var drop = item.find('div.drop');
        if (drop.length) {
            var padding = parseInt(drop.css('padding-left')) + parseInt(drop.css('padding-right'));
            var w = nav.offset().left - item.offset().left + navW - padding;
            drop.css({ width: w });
        }
    });
};

// open-close init
function initOpenClose() {
    var dur = 400; //ms
    var activeClass = 'active';
    jQuery('div.slide-block').each(function () {
        var hold = jQuery(this);
        var open = hold.find('a.open');
        var close = hold.find('a.close');
        var slide = hold.find('div.block');
        var h = slide.height();
        if (!hold.hasClass(activeClass)) slide.css({ height: 0 });
        open.click(function (e) {
            hold.addClass(activeClass);
            slide.animate({ height: h }, { duration: dur, queue: false });
            return false;
        });
        close.click(function (e) {
            hold.removeClass(activeClass);
            slide.animate({ height: 0 }, { duration: dur, queue: false });
            return false;
        });
    })
};

// clear inputs plugin
function clearFormFields(o) {
    if (o.clearInputs == null) o.clearInputs = true;
    if (o.clearTextareas == null) o.clearTextareas = true;
    if (o.passwordFieldText == null) o.passwordFieldText = false;
    if (o.addClassFocus == null) o.addClassFocus = false;
    if (!o.filterClass) o.filterClass = "default";
    if (o.clearInputs) {
        var inputs = document.getElementsByTagName("input");
        for (var i = 0; i < inputs.length; i++) {
            if ((checkIfAdminControl(inputs[i]) == false) && (inputs[i].type == "text" || inputs[i].type == "password") && inputs[i].className.indexOf(o.filterClass) == -1) {
                inputs[i].valueHtml = inputs[i].value;
                inputs[i].onfocus = function () {
                    if (this.valueHtml == this.value) this.value = "";
                    if (this.fake) {
                        inputsSwap(this, this.previousSibling);
                        this.previousSibling.focus();
                    }
                    if (o.addClassFocus && !this.fake) {
                        this.className += " " + o.addClassFocus;
                        this.parentNode.className += " parent-" + o.addClassFocus;
                    }
                }
                inputs[i].onblur = function () {
                    if (this.value == "") {
                        this.value = this.valueHtml;
                        if (o.passwordFieldText && this.type == "password") inputsSwap(this, this.nextSibling);
                    }
                    if (o.addClassFocus) {
                        this.className = this.className.replace(o.addClassFocus, "");
                        this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
                    }
                }
                if (o.passwordFieldText && inputs[i].type == "password") {
                    var fakeInput = document.createElement("input");
                    fakeInput.type = "text";
                    fakeInput.value = inputs[i].value;
                    fakeInput.className = inputs[i].className;
                    fakeInput.fake = true;
                    inputs[i].parentNode.insertBefore(fakeInput, inputs[i].nextSibling);
                    inputsSwap(inputs[i], null);
                }
            }
        }
    }
    if (o.clearTextareas) {
        var textareas = document.getElementsByTagName("textarea");
        for (var i = 0; i < textareas.length; i++) {
            if (checkIfAdminControl(textareas[i]))
                continue;

            if (textareas[i].className.indexOf(o.filterClass) == -1) {
                textareas[i].valueHtml = textareas[i].value;
                textareas[i].onfocus = function () {
                    if (this.value == this.valueHtml) this.value = "";
                    if (o.addClassFocus) {
                        this.className += " " + o.addClassFocus;
                        this.parentNode.className += " parent-" + o.addClassFocus;
                    }
                }
                textareas[i].onblur = function () {
                    if (this.value == "") this.value = this.valueHtml;
                    if (o.addClassFocus) {
                        this.className = this.className.replace(o.addClassFocus, "");
                        this.parentNode.className = this.parentNode.className.replace("parent-" + o.addClassFocus, "");
                    }
                }
            }
        }
    }
    function inputsSwap(el, el2) {
        if (el) el.style.display = "none";
        if (el2) el2.style.display = "inline";
    }
};

// browser detect script
browserDetect = {
    matchGroups: [
		[
			{ uaString: 'win', className: 'win' },
			{ uaString: 'mac', className: 'mac' },
			{ uaString: ['linux', 'x11'], className: 'linux' }
		],
		[
			{ uaString: 'msie', className: 'trident' },
			{ uaString: 'applewebkit', className: 'webkit' },
			{ uaString: 'gecko', className: 'gecko' },
			{ uaString: 'opera', className: 'presto' }
		],
		[
			{ uaString: 'msie 9.0', className: 'ie9' },
			{ uaString: 'msie 8.0', className: 'ie8' },
			{ uaString: 'msie 7.0', className: 'ie7' },
			{ uaString: 'msie 6.0', className: 'ie6' },
			{ uaString: 'firefox/2', className: 'ff2' },
			{ uaString: 'firefox/3', className: 'ff3' },
			{ uaString: 'firefox/4', className: 'ff4' },
			{ uaString: ['opera', 'version/11'], className: 'opera11' },
			{ uaString: ['opera', 'version/10'], className: 'opera10' },
			{ uaString: 'opera/9', className: 'opera9' },
			{ uaString: ['safari', 'version/3'], className: 'safari3' },
			{ uaString: ['safari', 'version/4'], className: 'safari4' },
			{ uaString: ['safari', 'version/5'], className: 'safari5' },
			{ uaString: 'chrome', className: 'chrome' },
			{ uaString: 'safari', className: 'safari2' },
			{ uaString: 'unknown', className: 'unknown' }
		]
	],
    init: function () {
        this.detect();
        return this;
    },
    addClass: function (className) {
        this.pageHolder = document.documentElement;
        document.documentElement.className += ' ' + className;
    },
    detect: function () {
        for (var i = 0, curGroup; i < this.matchGroups.length; i++) {
            curGroup = this.matchGroups[i];
            for (var j = 0, curItem; j < curGroup.length; j++) {
                curItem = curGroup[j];
                if (typeof curItem.uaString === 'string') {
                    if (this.uaMatch(curItem.uaString)) {
                        this.addClass(curItem.className);
                        break;
                    }
                } else {
                    for (var k = 0, allMatch = true; k < curItem.uaString.length; k++) {
                        if (!this.uaMatch(curItem.uaString[k])) {
                            allMatch = false;
                            break;
                        }
                    }
                    if (allMatch) {
                        this.addClass(curItem.className);
                        break;
                    }
                }
            }
        }
    },
    uaMatch: function (s) {
        if (!this.ua) {
            this.ua = navigator.userAgent.toLowerCase();
        }
        return this.ua.indexOf(s) != -1;
    }
}.init();

// custom forms script
var maxVisibleOptions = 20;
var all_selects = false;
var active_select = null;
var selectText = "please select";

function initCustomForms() {
    getElements();
    separateElements();
    replaceRadios();
    // Removed because there are no checkbox replacement styles
    //replaceCheckboxes();
    replaceSelects();

    // hide drop when scrolling or resizing window
    if (window.addEventListener) {
        window.addEventListener("scroll", hideActiveSelectDrop, false);
        window.addEventListener("resize", hideActiveSelectDrop, false);
    }
    else if (window.attachEvent) {
        window.attachEvent("onscroll", hideActiveSelectDrop);
        window.attachEvent("onresize", hideActiveSelectDrop);
    }
}

function refreshCustomForms() {
    // remove prevously created elements
    if (window.inputs) {
        // Removed because there are no checkbox replacement styles
        /*for (var i = 0; i < checkboxes.length; i++) {
            if (checkboxes[i].checked) { checkboxes[i]._ca.className = "checkboxAreaChecked"; }
            else { checkboxes[i]._ca.className = "checkboxArea"; }
        }*/
        for (var i = 0; i < radios.length; i++) {
            if (radios[i].checked) { radios[i]._ra.className = "radioAreaChecked"; }
            else { radios[i]._ra.className = "radioArea"; }
        }
        for (var i = 0; i < selects.length; i++) {
            var newText = document.createElement('div');
            if (selects[i].options[selects[i].selectedIndex].title.indexOf('image') != -1) {
                newText.innerHTML = '<img src="' + selects[i].options[selects[i].selectedIndex].title + '" alt="" />';
                newText.innerHTML += '<span>' + selects[i].options[selects[i].selectedIndex].text + '</span>';
            } else {
                newText.innerHTML = selects[i].options[selects[i].selectedIndex].text;
            }
            populateSelectOptions(selects[i]);
            $("#optionsDiv" + i + " ul").html(selects[i]._options.innerHTML);
            document.getElementById("mySelectText" + i).innerHTML = newText.innerHTML;
        }
    }
}

// getting all the required elements
function getElements() {
    // remove prevously created elements
    if (window.inputs) {
        for (var i = 0; i < inputs.length; i++) {
            inputs[i].className = inputs[i].className.replace('outtaHere', '');
            if (inputs[i]._ca) inputs[i]._ca.parentNode.removeChild(inputs[i]._ca);
            else if (inputs[i]._ra) inputs[i]._ra.parentNode.removeChild(inputs[i]._ra);
        }
        for (i = 0; i < selects.length; i++) {
            selects[i].replaced = null;
            selects[i].className = selects[i].className.replace('outtaHere', '');
            selects[i]._optionsDiv._parent.parentNode.removeChild(selects[i]._optionsDiv._parent);
            selects[i]._optionsDiv.parentNode.removeChild(selects[i]._optionsDiv);
        }
    }

    // reset state
    inputs = new Array();
    selects = new Array();
    labels = new Array();
    radios = new Array();
    radioLabels = new Array();
    checkboxes = new Array();
    checkboxLabels = new Array();
    for (var nf = 0; nf < document.getElementsByTagName("form").length; nf++) {
        if (document.forms[nf].className.indexOf("default") < 0) {
            for (var nfi = 0; nfi < document.forms[nf].getElementsByTagName("input").length; nfi++) {
                var control = document.forms[nf].getElementsByTagName("input")[nfi];
                if (checkIfAdminControl(control) == false)
                    inputs.push(control);
            }
            for (var nfl = 0; nfl < document.forms[nf].getElementsByTagName("label").length; nfl++) {
                var control = document.forms[nf].getElementsByTagName("label")[nfl];
                if (checkIfAdminControl(control) == false)
                    labels.push(control);
            }
            for (var nfs = 0; nfs < document.forms[nf].getElementsByTagName("select").length; nfs++) {
                var control = document.forms[nf].getElementsByTagName("select")[nfs];
                if (checkIfAdminControl(control) == false)
                    selects.push(control);
            }
        }
    }
}

// Determine if the control is in a parent that has a class of AdminPage
function checkIfAdminControl(control) {
    if (control == null) {
        return false;
    }

    if (control.parentNode == null) {
        return false;
    }

    var parent = control.parentNode;

    if (parent.className != null) {
        var classes = parent.className;

        /* TO EXLCUDE CONTROLS FROM BEING RESTYLED BY CLASS ADD ITEMS HERE */
        if (classes.indexOf('admin') != -1) {
            return true;
        } else if (classes.indexOf('adminPage') != -1) {
            return true;
        } else if (classes.indexOf('modulecontent') != -1) {
            return true;
        }
        /* TO EXLCUDE CONTROLS FROM BEING RESTYLED BY CLASS ADD ITEMS HERE */
    }

    return checkIfAdminControl(parent);
}

// separating all the elements in their respective arrays
function separateElements() {
    var r = 0; var c = 0; var t = 0; var rl = 0; var cl = 0; var tl = 0; var b = 0;
    for (var q = 0; q < inputs.length; q++) {
        if (inputs[q].type == "radio") {
            radios[r] = inputs[q]; ++r;
            for (var w = 0; w < labels.length; w++) {
                if ((inputs[q].id) && labels[w].htmlFor == inputs[q].id) {
                    radioLabels[rl] = labels[w];
                    ++rl;
                }
            }
        }
        if (inputs[q].type == "checkbox") {
            checkboxes[c] = inputs[q]; ++c;
            for (var w = 0; w < labels.length; w++) {
                if ((inputs[q].id) && (labels[w].htmlFor == inputs[q].id)) {
                    checkboxLabels[cl] = labels[w];
                    ++cl;
                }
            }
        }
    }
}

//replacing radio buttons
function replaceRadios() {
    for (var q = 0; q < radios.length; q++) {
        radios[q].className += " outtaHere";
        var radioArea = document.createElement("div");
        if (radios[q].checked) {
            radioArea.className = "radioAreaChecked";
        }
        else {
            radioArea.className = "radioArea";
        }
        radioArea.id = "myRadio" + q;
        radios[q].parentNode.insertBefore(radioArea, radios[q]);
        radios[q]._ra = radioArea;

        radioArea.onclick = new Function('rechangeRadios(' + q + ')');
        if (radioLabels[q]) {
            if (radios[q].checked) {
                radioLabels[q].className += "radioAreaCheckedLabel";
            }
            radioLabels[q].onclick = new Function('rechangeRadios(' + q + ')');
        }
    }
    return true;
}

//checking radios
function checkRadios(who) {
    var what = radios[who]._ra;
    for (var q = 0; q < radios.length; q++) {
        if ((radios[q]._ra.className == "radioAreaChecked") && (radios[q]._ra.nextSibling.name == radios[who].name)) {
            radios[q]._ra.className = "radioArea";
        }
    }
    what.className = "radioAreaChecked";
}

//changing radios
function changeRadios(who) {
    if (radios[who].checked) {
        for (var q = 0; q < radios.length; q++) {
            if (radios[q].name == radios[who].name) {
                radios[q].checked = false;
            }
            radios[who].checked = true;
            checkRadios(who);
        }
    }
}

//rechanging radios
function rechangeRadios(who) {
    if (!radios[who].checked) {
        for (var q = 0; q < radios.length; q++) {
            if (radios[q].name == radios[who].name) {
                radios[q].checked = false;
                if (radioLabels[q]) radioLabels[q].className = radioLabels[q].className.replace("radioAreaCheckedLabel", "");
            }
        }
        radios[who].checked = true;
        if (radioLabels[who] && radioLabels[who].className.indexOf("radioAreaCheckedLabel") < 0) {
            radioLabels[who].className += " radioAreaCheckedLabel";
        }
        checkRadios(who);

        if (window.$ && window.$.fn) {
            $(radios[who]).trigger('change');
        }
    }
}

//replacing checkboxes
function replaceCheckboxes() {
    for (var q = 0; q < checkboxes.length; q++) {
        checkboxes[q].className += " outtaHere";
        var checkboxArea = document.createElement("div");
        if (checkboxes[q].checked) {
            checkboxArea.className = "checkboxAreaChecked";
            if (checkboxLabels[q]) {
                checkboxLabels[q].className += " checkboxAreaCheckedLabel"
            }
        }
        else {
            checkboxArea.className = "checkboxArea";
        }
        checkboxArea.id = "myCheckbox" + q;
        checkboxes[q].parentNode.insertBefore(checkboxArea, checkboxes[q]);
        checkboxes[q]._ca = checkboxArea;
        checkboxArea.onclick = new Function('rechangeCheckboxes(' + q + ')');
        if (checkboxLabels[q]) {
            checkboxLabels[q].onclick = new Function('changeCheckboxes(' + q + ')');
        }
        checkboxes[q].onkeydown = checkEvent;
    }
    return true;
}

//checking checkboxes
function checkCheckboxes(who, action) {
    var what = checkboxes[who]._ca;
    if (action == true) {
        what.className = "checkboxAreaChecked";
        what.checked = true;
    }
    if (action == false) {
        what.className = "checkboxArea";
        what.checked = false;
    }
    if (checkboxLabels[who]) {
        if (checkboxes[who].checked) {
            if (checkboxLabels[who].className.indexOf("checkboxAreaCheckedLabel") < 0) {
                checkboxLabels[who].className += " checkboxAreaCheckedLabel";
            }
        } else {
            checkboxLabels[who].className = checkboxLabels[who].className.replace("checkboxAreaCheckedLabel", "");
        }
    }

}

//changing checkboxes
function changeCheckboxes(who) {
    setTimeout(function () {
        if (checkboxes[who].checked) {
            checkCheckboxes(who, true);
        } else {
            checkCheckboxes(who, false);
        }
    }, 10);
}

// rechanging checkboxes
function rechangeCheckboxes(who) {
    var tester = false;
    if (checkboxes[who].checked == true) {
        tester = false;
    }
    else {
        tester = true;
    }
    checkboxes[who].checked = tester;
    checkCheckboxes(who, tester);
    if (window.$ && window.$.fn) {
        $(checkboxes[who]).trigger('change');
    }
}

// check event
function checkEvent(e) {
    if (!e) var e = window.event;
    if (e.keyCode == 32) { for (var q = 0; q < checkboxes.length; q++) { if (this == checkboxes[q]) { changeCheckboxes(q); } } } //check if space is pressed
}

// replace selects
function replaceSelects() {
    for (var q = 0; q < selects.length; q++) {
        if (!selects[q].replaced && selects[q].offsetWidth) {
            selects[q]._number = q;
            //create and build div structure
            var selectArea = document.createElement("div");
            var left = document.createElement("span");
            left.className = "left";
            selectArea.appendChild(left);

            var disabled = document.createElement("span");
            disabled.className = "disabled";
            selectArea.appendChild(disabled);

            selects[q]._disabled = disabled;
            var center = document.createElement("span");
            var button = document.createElement("a");
            var text = document.createTextNode(selectText);
            center.id = "mySelectText" + q;

            var stWidth = selects[q].offsetWidth;
            selectArea.style.width = stWidth + "px";
            if (selects[q].parentNode.className.indexOf("type2") != -1) {
                button.href = "javascript:showOptions(" + q + ",true)";
            } else {
                button.href = "javascript:showOptions(" + q + ",false)";
            }
            button.className = "selectButton";
            selectArea.className = "selectArea";
            selectArea.className += " " + selects[q].className;
            selectArea.id = "sarea" + q;
            center.className = "center";
            center.appendChild(text);
            selectArea.appendChild(center);
            selectArea.appendChild(button);

            //insert select div
            selects[q].parentNode.insertBefore(selectArea, selects[q]);
            //build & place options div

            var optionsDiv = document.createElement("div");
            var optionsList = document.createElement("ul");
            var optionsListHolder = document.createElement("div");

            optionsListHolder.className = "select-center";
            optionsListHolder.innerHTML = "<div class='select-center-right'></div>";
            optionsDiv.innerHTML += "<div class='select-top'><div class='select-top-left'></div><div class='select-top-right'></div></div>";

            optionsListHolder.appendChild(optionsList);
            optionsDiv.appendChild(optionsListHolder);

            selects[q]._optionsDiv = optionsDiv;
            selects[q]._options = optionsList;

            optionsDiv.style.width = stWidth + "px";
            optionsDiv._parent = selectArea;

            optionsDiv.className = "optionsDivInvisible";
            optionsDiv.id = "optionsDiv" + q;

            if (selects[q].className.length) {
                optionsDiv.className += ' drop-' + selects[q].className;
            }

            populateSelectOptions(selects[q]);
            optionsDiv.innerHTML += "<div class='select-bottom'><div class='select-bottom-left'></div><div class='select-bottom-right'></div></div>";
            document.body.appendChild(optionsDiv);
            selects[q].replaced = true;

            // too many options
            if (selects[q].options.length > maxVisibleOptions) {
                optionsDiv.className += ' optionsDivScroll';
            }

            //hide the select field
            if (selects[q].className.indexOf('default') != -1) {
                selectArea.style.display = 'none';
            } else {
                selects[q].className += " outtaHere";
            }
        }
    }
    all_selects = true;
}

//collecting select options
function populateSelectOptions(me) {
    me._options.innerHTML = "";
    for (var w = 0; w < me.options.length; w++) {
        var optionHolder = document.createElement('li');
        var optionLink = document.createElement('a');
        var optionTxt;
        if (me.options[w].title.indexOf('image') != -1) {
            optionTxt = document.createElement('img');
            optionSpan = document.createElement('span');
            optionTxt.src = me.options[w].title;
            optionSpan = document.createTextNode(me.options[w].text);
        } else {
            optionTxt = document.createTextNode(me.options[w].text);
        }

        // hidden default option
        if (me.options[w].className.indexOf('default') != -1) {
            optionHolder.style.display = 'none'
        }

        optionLink.href = "javascript:showOptions(" + me._number + "); selectMe('" + me.id + "'," + w + "," + me._number + ");";
        if (me.options[w].title.indexOf('image') != -1) {
            optionLink.appendChild(optionTxt);
            optionLink.appendChild(optionSpan);
        } else {
            optionLink.appendChild(optionTxt);
        }
        optionHolder.appendChild(optionLink);
        me._options.appendChild(optionHolder);
        //check for pre-selected items
        if (me.options[w].selected) {
            selectMe(me.id, w, me._number, true);
        }
    }
    if (me.disabled) {
        me._disabled.style.display = "block";
    } else {
        me._disabled.style.display = "none";
    }
}

//selecting me
function selectMe(selectFieldId, linkNo, selectNo, quiet) {
    selectField = selects[selectNo];
    for (var k = 0; k < selectField.options.length; k++) {
        if (k == linkNo) {
            selectField.options[k].selected = true;
        }
        else {
            selectField.options[k].selected = false;
        }
    }

    //show selected option
    textVar = document.getElementById("mySelectText" + selectNo);
    var newText;
    var optionSpan;
    if (selectField.options[linkNo].title.indexOf('image') != -1) {
        newText = document.createElement('img');
        newText.src = selectField.options[linkNo].title;
        optionSpan = document.createElement('span');
        optionSpan = document.createTextNode(selectField.options[linkNo].text);
    } else {
        newText = document.createTextNode(selectField.options[linkNo].text);
    }
    if (selectField.options[linkNo].title.indexOf('image') != -1) {
        if (textVar.childNodes.length > 1) textVar.removeChild(textVar.childNodes[0]);
        textVar.replaceChild(newText, textVar.childNodes[0]);
        textVar.appendChild(optionSpan);
    } else {
        if (textVar.childNodes.length > 1) textVar.removeChild(textVar.childNodes[0]);
        textVar.replaceChild(newText, textVar.childNodes[0]);
    }
    if (!quiet && all_selects) {
        if (typeof selectField.onchange === 'function') {
            selectField.onchange();
        }
        if (window.$ && window.$.fn) {
            $(selectField).trigger('change');
        }
    }
}

//showing options
function showOptions(g) {
    _elem = document.getElementById("optionsDiv" + g);
    var divArea = document.getElementById("sarea" + g);
    if (active_select && active_select != _elem) {
        active_select.className = active_select.className.replace('optionsDivVisible', ' optionsDivInvisible');
        active_select.style.height = "auto";
    }
    if (_elem.className.indexOf("optionsDivInvisible") != -1) {
        _elem.style.left = "-9999px";
        _elem.style.top = findPosY(divArea) + divArea.offsetHeight + 'px';
        _elem.className = _elem.className.replace('optionsDivInvisible', '');
        _elem.className += " optionsDivVisible";
        /*if (_elem.offsetHeight > 200)
        {
        _elem.style.height = "200px";
        }*/
        _elem.style.left = findPosX(divArea) + 'px';

        active_select = _elem;
        if (_elem._parent.className.indexOf('selectAreaActive') < 0) {
            _elem._parent.className += ' selectAreaActive';
        }

        if (document.documentElement) {
            document.documentElement.onclick = hideSelectOptions;
        } else {
            window.onclick = hideSelectOptions;
        }
    }
    else if (_elem.className.indexOf("optionsDivVisible") != -1) {
        hideActiveSelectDrop();
    }

    // for mouseout
    /*_elem.timer = false;
    _elem.onmouseover = function() {
    if (this.timer) clearTimeout(this.timer);
    }
    _elem.onmouseout = function() {
    var _this = this;
    this.timer = setTimeout(function(){
    _this.style.height = "auto";
    _this.className = _this.className.replace('optionsDivVisible','');
    if (_elem.className.indexOf('optionsDivInvisible') == -1)
    _this.className += " optionsDivInvisible";
    },200);
    }*/
}

function hideActiveSelectDrop() {
    if (active_select) {
        active_select.style.height = "auto";
        active_select.className = active_select.className.replace('optionsDivVisible', '');
        active_select.className = active_select.className.replace('optionsDivInvisible', '');
        active_select._parent.className = active_select._parent.className.replace('selectAreaActive', '')
        active_select.className += " optionsDivInvisible";
        active_select = false;
    }
}

function hideSelectOptions(e) {
    if (active_select) {
        if (!e) e = window.event;
        var _target = (e.target || e.srcElement);
        if (!isElementBefore(_target, 'selectArea') && !isElementBefore(_target, 'optionsDiv')) {
            hideActiveSelectDrop();
            if (document.documentElement) {
                document.documentElement.onclick = function () { };
            }
            else {
                window.onclick = null;
            }
        }
    }
}

function isElementBefore(_el, _class) {
    var _parent = _el;
    do {
        _parent = _parent.parentNode;
    }
    while (_parent && _parent.className != null && _parent.className.indexOf(_class) == -1)
    return _parent.className && _parent.className.indexOf(_class) != -1;
}

function findPosY(obj) {
    if (obj.getBoundingClientRect) {
        var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
        var clientTop = document.documentElement.clientTop || document.body.clientTop || 0;
        return Math.round(obj.getBoundingClientRect().top + scrollTop - clientTop);
    } else {
        var posTop = 0;
        while (obj.offsetParent) { posTop += obj.offsetTop; obj = obj.offsetParent; }
        return posTop;
    }
}

function findPosX(obj) {
    if (obj.getBoundingClientRect) {
        var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;
        var clientLeft = document.documentElement.clientLeft || document.body.clientLeft || 0;
        return Math.round(obj.getBoundingClientRect().left + scrollLeft - clientLeft);
    } else {
        var posLeft = 0;
        while (obj.offsetParent) { posLeft += obj.offsetLeft; obj = obj.offsetParent; }
        return posLeft;
    }
};

// crawlline plugin
jQuery.fn.crawlLine = function (_options) {
    // defaults options
    var _options = jQuery.extend({
        speed: 2,
        crawElement: 'ul',
        textElement: 'li',
        hoverClass: 'viewText'
    }, _options);

    return this.each(function () {
        var _THIS = jQuery(this);
        var _el = $(_options.crawElement, _THIS).css('position', 'relative');
        var _text = $(_options.textElement, _THIS);
        var _clone = _text.css('whiteSpace', 'nowrap').clone();
        var _elWidth = 0;
        var _k = 1;

        var _textWidth = 0;
        _text.each(function () {
            _textWidth += $(this).outerWidth(true);
        });
        var _duration = _textWidth * 50 / _options.speed;
        _el.append(_clone);
        _el.css('width', _textWidth * 2);

        var animate = function () {
            _el.animate({ left: -_textWidth }, { queue: false, duration: _duration * _k, easing: 'linear', complete: function () {
                _el.css('left', '0');
                _k = 1;
                animate();
            } 
            })
        }

        if (_text.length > 0)
            animate();
        
        _THIS.hover(function () {
            _el.stop();
            _THIS.addClass(_options.hoverClass);
        }, function () {
            _THIS.removeClass(_options.hoverClass);
            _k = (_textWidth + parseInt(_el.css('left'))) / _textWidth;
            animate();
        })
    });
};

/* IE6 Hover fix module */
var ieHover = { lazyMode: true, init: function () { this.setDefaults(); return this }, setDefaults: function () { this.fixActive = /MSIE 6/.test(navigator.userAgent); if (this.fixActive) { this.hoverEvents = []; this.hoverQueue = []; this.activators = { onhover: { on: "onmouseenter", off: "onmouseleave" }, onactive: { on: "onmousedown", off: "onmouseup"} }; window.attachEvent("onload", this.bind(this.domReady, this)); window.attachEvent("onunload", this.bind(this.unhookHoverEvents, this)) } }, domReady: function () { this.pageReady = true; if (this.lazyMode) { this.processStylesheets() } if (this.hoverQueue.length) { for (var a = 0; a < this.hoverQueue.length; a++) { this.doFix(this.hoverQueue[a].s, this.hoverQueue[a].c) } } }, processStylesheets: function () { var c = document.styleSheets, a = c.length; for (var b = 0; b < a; b++) { this.parseStylesheet(c[b]) } }, parseStylesheet: function (f) { if (f.imports) { try { var b = f.imports, a = b.length; for (var d = 0; d < a; d++) { this.parseStylesheet(f.imports[d]) } } catch (g) { } } try { var h = (this.currentSheet = f).rules, a = h.length; for (var c = 0; c < a; c++) { this.parseCSSRule(h[c]) } } catch (g) { } }, parseCSSRule: function (f) { var g = f.selectorText, b = f.style.cssText; if (!/(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i.test(g) || !b) { return } var h = g.replace(/[^:]+:([a-z-]+).*/i, "on$1"); var j = g.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, ".$2" + h); var e = (/\.([a-z0-9_-]*on(hover|active))/i).exec(j)[1]; var c = g.replace(/:(hover|active).*$/, ""); var a = this.parseSelector(c); if (!a.length) { return } this.currentSheet.addRule(j, b); for (var d = 0; d < a.length; d++) { this.addHoverElement(a[d], e, this.activators[h]) } }, fix: function (a, b) { if (this.fixActive) { if (this.pageReady) { this.doFix(a, b) } else { this.hoverQueue.push({ s: a, c: b }) } } }, doFix: function (a, c) { if (this.fixActive && typeof a === "string") { var d = this.parseSelector(a); for (var b = 0; b < d.length; b++) { this.addHoverElement(d[b], c || "hover", this.activators.onhover) } } }, addHoverElement: function (c, b, a) { if (!c.hovers) { c.hovers = {} } if (c.hovers[b]) { return } c.hovers[b] = true; this.hookHoverEvent(c, a.on, function () { c.className += " " + b }); this.hookHoverEvent(c, a.off, function () { c.className = c.className.replace(new RegExp("\\s+" + b, "g"), "") }) }, hookHoverEvent: function (c, b, a) { c.attachEvent(b, a); this.hoverEvents[this.hoverEvents.length] = { node: c, type: b, handler: a} }, unhookHoverEvents: function () { for (var b, a = 0; a < this.hoverEvents.length; a++) { b = this.hoverEvents[a]; b.node.detachEvent(b.type, b.handler) } }, parseSelector: (function () { var d = /^([^#.>`]*)(#|\.|\>|\`)(.+)$/; function e(g, f) { var k = g.split(/\s*\,\s*/); var j = []; for (var h = 0; h < k.length; h++) { j = j.concat(b(k[h], f)) } return j } function b(r, p, n) { r = r.replace(" ", "`"); var m = r.match(d); var l, o, g, q, j, h; var k = []; if (m == null) { m = [r, r] } if (m[1] == "") { m[1] = "*" } if (n == null) { n = "`" } if (p == null) { p = document } switch (m[2]) { case "#": q = m[3].match(d); if (q == null) { q = [null, m[3]] } l = document.getElementById(q[1]); if (l == null || (m[1] != "*" && !a(l, m[1]))) { return k } if (q.length == 2) { k.push(l); return k } return b(q[3], l, q[2]); case ".": if (n != ">") { o = c(p, m[1]) } else { o = p.childNodes } for (j = 0, h = o.length; j < h; j++) { l = o[j]; if (l.nodeType != 1) { continue } q = m[3].match(d); if (q != null) { if (l.className == null || l.className.match("(\\s|^)" + q[1] + "(\\s|$)") == null) { continue } g = b(q[3], l, q[2]); k = k.concat(g) } else { if (l.className != null && l.className.match("(\\s|^)" + m[3] + "(\\s|$)") != null) { k.push(l) } } } return k; case ">": if (n != ">") { o = c(p, m[1]) } else { o = p.childNodes } for (j = 0, h = o.length; j < h; j++) { l = o[j]; if (l.nodeType != 1) { continue } if (!a(l, m[1])) { continue } g = b(m[3], l, ">"); k = k.concat(g) } return k; case "`": o = c(p, m[1]); for (j = 0, h = o.length; j < h; j++) { l = o[j]; g = b(m[3], l, "`"); k = k.concat(g) } return k; default: if (n != ">") { o = c(p, m[1]) } else { o = p.childNodes } for (j = 0, h = o.length; j < h; j++) { l = o[j]; if (l.nodeType != 1) { continue } if (!a(l, m[1])) { continue } k.push(l) } return k } } function c(g, f) { if (f == "*" && g.all != null) { return g.all } return g.getElementsByTagName(f) } function a(g, f) { if (f == "*") { return true } return g.nodeName.toLowerCase().replace("html:", "") == f.toLowerCase() } return e } ()), bind: function (c, b, a) { return function () { return c.apply(b, a || arguments) } } }.init();
