function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) {
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}
function WebForm_DoPostBackWithOptions(options) {
    var validationResult = true;
    if (options.validation) {
        if (typeof(Page_ClientValidate) == 'function') {
            validationResult = Page_ClientValidate(options.validationGroup);
        }
    }
    if (validationResult) {
        if ((typeof(options.actionUrl) != "undefined") && (options.actionUrl != null) && (options.actionUrl.length > 0)) {
            theForm.action = options.actionUrl;
        }
        if (options.trackFocus) {
            var lastFocus = theForm.elements["__LASTFOCUS"];
            if ((typeof(lastFocus) != "undefined") && (lastFocus != null)) {
                if (typeof(document.activeElement) == "undefined") {
                    lastFocus.value = options.eventTarget;
                }
                else {
                    var active = document.activeElement;
                    if ((typeof(active) != "undefined") && (active != null)) {
                        if ((typeof(active.id) != "undefined") && (active.id != null) && (active.id.length > 0)) {
                            lastFocus.value = active.id;
                        }
                        else if (typeof(active.name) != "undefined") {
                            lastFocus.value = active.name;
                        }
                    }
                }
            }
        }
    }
    if (options.clientSubmit) {
        __doPostBack(options.eventTarget, options.eventArgument);
    }
}
var __pendingCallbacks = new Array();
var __synchronousCallBackIndex = -1;
function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
    var postData = __theFormPostData +
                "__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
                "&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
    if (theForm["__EVENTVALIDATION"]) {
        postData += "&__EVENTVALIDATION=" + WebForm_EncodeCallback(theForm["__EVENTVALIDATION"].value);
    }
    var xmlRequest,e;
    try {
        xmlRequest = new XMLHttpRequest();
    }
    catch(e) {
        try {
            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
        }
    }
    var setRequestHeaderMethodExists = true;
    try {
        setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);
    }
    catch(e) {}
    var callback = new Object();
    callback.eventCallback = eventCallback;
    callback.context = context;
    callback.errorCallback = errorCallback;
    callback.async = useAsync;
    var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
    if (!useAsync) {
        if (__synchronousCallBackIndex != -1) {
            __pendingCallbacks[__synchronousCallBackIndex] = null;
        }
        __synchronousCallBackIndex = callbackIndex;
    }
    if (setRequestHeaderMethodExists) {
        xmlRequest.onreadystatechange = WebForm_CallbackComplete;
        callback.xmlRequest = xmlRequest;
        xmlRequest.open("POST", theForm.action, true);
        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
        xmlRequest.send(postData);
        return;
    }
    callback.xmlRequest = new Object();
    var callbackFrameID = "__CALLBACKFRAME" + callbackIndex;
    var xmlRequestFrame = document.frames[callbackFrameID];
    if (!xmlRequestFrame) {
        xmlRequestFrame = document.createElement("IFRAME");
        xmlRequestFrame.width = "1";
        xmlRequestFrame.height = "1";
        xmlRequestFrame.frameBorder = "0";
        xmlRequestFrame.id = callbackFrameID;
        xmlRequestFrame.name = callbackFrameID;
        xmlRequestFrame.style.position = "absolute";
        xmlRequestFrame.style.top = "-100px"
        xmlRequestFrame.style.left = "-100px";
        try {
            if (callBackFrameUrl) {
                xmlRequestFrame.src = callBackFrameUrl;
            }
        }
        catch(e) {}
        document.body.appendChild(xmlRequestFrame);
    }
    var interval = window.setInterval(function() {
        xmlRequestFrame = document.frames[callbackFrameID];
        if (xmlRequestFrame && xmlRequestFrame.document) {
            window.clearInterval(interval);
            xmlRequestFrame.document.write("");
            xmlRequestFrame.document.close();
            xmlRequestFrame.document.write('<html><body><form method="post"><input type="hidden" name="__CALLBACKLOADSCRIPT" value="t"></form></body></html>');
            xmlRequestFrame.document.close();
            xmlRequestFrame.document.forms[0].action = theForm.action;
            var count = __theFormPostCollection.length;
            var element;
            for (var i = 0; i < count; i++) {
                element = __theFormPostCollection[i];
                if (element) {
                    var fieldElement = xmlRequestFrame.document.createElement("INPUT");
                    fieldElement.type = "hidden";
                    fieldElement.name = element.name;
                    fieldElement.value = element.value;
                    xmlRequestFrame.document.forms[0].appendChild(fieldElement);
                }
            }
            var callbackIdFieldElement = xmlRequestFrame.document.createElement("INPUT");
            callbackIdFieldElement.type = "hidden";
            callbackIdFieldElement.name = "__CALLBACKID";
            callbackIdFieldElement.value = eventTarget;
            xmlRequestFrame.document.forms[0].appendChild(callbackIdFieldElement);
            var callbackParamFieldElement = xmlRequestFrame.document.createElement("INPUT");
            callbackParamFieldElement.type = "hidden";
            callbackParamFieldElement.name = "__CALLBACKPARAM";
            callbackParamFieldElement.value = eventArgument;
            xmlRequestFrame.document.forms[0].appendChild(callbackParamFieldElement);
            if (theForm["__EVENTVALIDATION"]) {
                var callbackValidationFieldElement = xmlRequestFrame.document.createElement("INPUT");
                callbackValidationFieldElement.type = "hidden";
                callbackValidationFieldElement.name = "__EVENTVALIDATION";
                callbackValidationFieldElement.value = theForm["__EVENTVALIDATION"].value;
                xmlRequestFrame.document.forms[0].appendChild(callbackValidationFieldElement);
            }
            var callbackIndexFieldElement = xmlRequestFrame.document.createElement("INPUT");
            callbackIndexFieldElement.type = "hidden";
            callbackIndexFieldElement.name = "__CALLBACKINDEX";
            callbackIndexFieldElement.value = callbackIndex;
            xmlRequestFrame.document.forms[0].appendChild(callbackIndexFieldElement);
            xmlRequestFrame.document.forms[0].submit();
        }
    }, 10);
}
function WebForm_CallbackComplete() {
    for (var i = 0; i < __pendingCallbacks.length; i++) {
        callbackObject = __pendingCallbacks[i];
        if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
            WebForm_ExecuteCallback(callbackObject);
            if (!__pendingCallbacks[i].async) {
                __synchronousCallBackIndex = -1;
            }
            __pendingCallbacks[i] = null;
            var callbackFrameID = "__CALLBACKFRAME" + i;
            var xmlRequestFrame = document.getElementById(callbackFrameID);
            if (xmlRequestFrame) {
                xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);
            }
        }
    }
}
function WebForm_ExecuteCallback(callbackObject) {
    var response = callbackObject.xmlRequest.responseText;
    if (response.charAt(0) == "s") {
        if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) {
            callbackObject.eventCallback(response.substring(1), callbackObject.context);
        }
    }
    else if (response.charAt(0) == "e") {
        if ((typeof(callbackObject.errorCallback) != "undefined") && (callbackObject.errorCallback != null)) {
            callbackObject.errorCallback(response.substring(1), callbackObject.context);
        }
    }
    else {
        var separatorIndex = response.indexOf("|");
        if (separatorIndex != -1) {
            var validationFieldLength = parseInt(response.substring(0, separatorIndex));
            if (!isNaN(validationFieldLength)) {
                var validationField = response.substring(separatorIndex + 1, separatorIndex + validationFieldLength + 1);
                if (validationField != "") {
                    var validationFieldElement = theForm["__EVENTVALIDATION"];
                    if (!validationFieldElement) {
                        validationFieldElement = document.createElement("INPUT");
                        validationFieldElement.type = "hidden";
                        validationFieldElement.name = "__EVENTVALIDATION";
                        theForm.appendChild(validationFieldElement);
                    }
                    validationFieldElement.value = validationField;
                }
                if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) {
                    callbackObject.eventCallback(response.substring(separatorIndex + validationFieldLength + 1), callbackObject.context);
                }
            }
        }
    }
}
function WebForm_FillFirstAvailableSlot(array, element) {
    var i;
    for (i = 0; i < array.length; i++) {
        if (!array[i]) break;
    }
    array[i] = element;
    return i;
}
var __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);
var __theFormPostData = "";
var __theFormPostCollection = new Array();
function WebForm_InitCallback() {
    var count = theForm.elements.length;
    var element;
    for (var i = 0; i < count; i++) {
        element = theForm.elements[i];
        var tagName = element.tagName.toLowerCase();
        if (tagName == "input") {
            var type = element.type;
            if ((type == "text" || type == "hidden" || type == "password" ||
                ((type == "checkbox" || type == "radio") && element.checked)) &&
                (element.id != "__EVENTVALIDATION")) {
                WebForm_InitCallbackAddField(element.name, element.value);
            }
        }
        else if (tagName == "select") {
            var selectCount = element.options.length;
            for (var j = 0; j < selectCount; j++) {
                var selectChild = element.options[j];
                if (selectChild.selected == true) {
                    WebForm_InitCallbackAddField(element.name, element.value);
                }
            }
        }
        else if (tagName == "textarea") {
            WebForm_InitCallbackAddField(element.name, element.value);
        }
    }
}
function WebForm_InitCallbackAddField(name, value) {
    var nameValue = new Object();
    nameValue.name = name;
    nameValue.value = value;
    __theFormPostCollection[__theFormPostCollection.length] = nameValue;
    __theFormPostData += WebForm_EncodeCallback(name) + "=" + WebForm_EncodeCallback(value) + "&";
}
function WebForm_EncodeCallback(parameter) {
    if (encodeURIComponent) {
        return encodeURIComponent(parameter);
    }
    else {
        return escape(parameter);
    }
}
var __disabledControlArray = new Array();
function WebForm_ReEnableControls() {
    if (typeof(__enabledControlArray) == 'undefined') {
        return false;
    }
    var disabledIndex = 0;
    for (var i = 0; i < __enabledControlArray.length; i++) {
        var c;
        if (__nonMSDOMBrowser) {
            c = document.getElementById(__enabledControlArray[i]);
        }
        else {
            c = document.all[__enabledControlArray[i]];
        }
        if ((typeof(c) != "undefined") && (c != null) && (c.disabled == true)) {
            c.disabled = false;
            __disabledControlArray[disabledIndex++] = c;
        }
    }
    setTimeout("WebForm_ReDisableControls()", 0);
    return true;
}
function WebForm_ReDisableControls() {
    for (var i = 0; i < __disabledControlArray.length; i++) {
        __disabledControlArray[i].disabled = true;
    }
}
function WebForm_FireDefaultButton(event, target) {
    if (event.keyCode == 13) {
        var src = event.srcElement || event.target;
        if (!src || (src.tagName.toLowerCase() != "textarea")) {
            var defaultButton;
            if (__nonMSDOMBrowser) {
               defaultButton = document.getElementById(target);
            }
            else {
                defaultButton = document.all[target];
            }
            if (defaultButton && typeof(defaultButton.click) != "undefined") {
                defaultButton.click();
                event.cancelBubble = true;
                if (event.stopPropagation) event.stopPropagation();
                return false;
            }
        }
    }
    return true;
}
function WebForm_GetScrollX() {
    if (__nonMSDOMBrowser) {
        return window.pageXOffset;
    }
    else {
        if (document.documentElement && document.documentElement.scrollLeft) {
            return document.documentElement.scrollLeft;
        }
        else if (document.body) {
            return document.body.scrollLeft;
        }
    }
    return 0;
}
function WebForm_GetScrollY() {
    if (__nonMSDOMBrowser) {
        return window.pageYOffset;
    }
    else {
        if (document.documentElement && document.documentElement.scrollTop) {
            return document.documentElement.scrollTop;
        }
        else if (document.body) {
            return document.body.scrollTop;
        }
    }
    return 0;
}
function WebForm_SaveScrollPositionSubmit() {
    if (__nonMSDOMBrowser) {
        theForm.elements['__SCROLLPOSITIONY'].value = window.pageYOffset;
        theForm.elements['__SCROLLPOSITIONX'].value = window.pageXOffset;
    }
    else {
        theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
        theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
    }
    if ((typeof(this.oldSubmit) != "undefined") && (this.oldSubmit != null)) {
        return this.oldSubmit();
    }
    return true;
}
function WebForm_SaveScrollPositionOnSubmit() {
    theForm.__SCROLLPOSITIONX.value = WebForm_GetScrollX();
    theForm.__SCROLLPOSITIONY.value = WebForm_GetScrollY();
    if ((typeof(this.oldOnSubmit) != "undefined") && (this.oldOnSubmit != null)) {
        return this.oldOnSubmit();
    }
    return true;
}
function WebForm_RestoreScrollPosition() {
    if (__nonMSDOMBrowser) {
        window.scrollTo(theForm.elements['__SCROLLPOSITIONX'].value, theForm.elements['__SCROLLPOSITIONY'].value);
    }
    else {
        window.scrollTo(theForm.__SCROLLPOSITIONX.value, theForm.__SCROLLPOSITIONY.value);
    }
    if ((typeof(theForm.oldOnLoad) != "undefined") && (theForm.oldOnLoad != null)) {
        return theForm.oldOnLoad();
    }
    return true;
}
function WebForm_TextBoxKeyHandler(event) {
    if (event.keyCode == 13) {
        var target;
        if (__nonMSDOMBrowser) {
            target = event.target;
        }
        else {
            target = event.srcElement;
        }
        if ((typeof(target) != "undefined") && (target != null)) {
            if (typeof(target.onchange) != "undefined") {
                target.onchange();
                event.cancelBubble = true;
                if (event.stopPropagation) event.stopPropagation();
                return false;
            }
        }
    }
    return true;
}
function WebForm_TrimString(value) {
    return value.replace(/^\s+|\s+$/g, '')
}
function WebForm_AppendToClassName(element, className) {
    var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';
    className = WebForm_TrimString(className);
    var index = currentClassName.indexOf(' ' + className + ' ');
    if (index === -1) {
        element.className = (element.className === '') ? className : element.className + ' ' + className;
    }
}
function WebForm_RemoveClassName(element, className) {
    var currentClassName = ' ' + WebForm_TrimString(element.className) + ' ';
    className = WebForm_TrimString(className);
    var index = currentClassName.indexOf(' ' + className + ' ');
    if (index >= 0) {
        element.className = WebForm_TrimString(currentClassName.substring(0, index) + ' ' +
            currentClassName.substring(index + className.length + 1, currentClassName.length));
    }
}
function WebForm_GetElementById(elementId) {
    if (document.getElementById) {
        return document.getElementById(elementId);
    }
    else if (document.all) {
        return document.all[elementId];
    }
    else return null;
}
function WebForm_GetElementByTagName(element, tagName) {
    var elements = WebForm_GetElementsByTagName(element, tagName);
    if (elements && elements.length > 0) {
        return elements[0];
    }
    else return null;
}
function WebForm_GetElementsByTagName(element, tagName) {
    if (element && tagName) {
        if (element.getElementsByTagName) {
            return element.getElementsByTagName(tagName);
        }
        if (element.all && element.all.tags) {
            return element.all.tags(tagName);
        }
    }
    return null;
}
function WebForm_GetElementDir(element) {
    if (element) {
        if (element.dir) {
            return element.dir;
        }
        return WebForm_GetElementDir(element.parentNode);
    }
    return "ltr";
}
function WebForm_GetElementPosition(element) {
    var result = new Object();
    result.x = 0;
    result.y = 0;
    result.width = 0;
    result.height = 0;
    if (element.offsetParent) {
        result.x = element.offsetLeft;
        result.y = element.offsetTop;
        var parent = element.offsetParent;
        while (parent) {
            result.x += parent.offsetLeft;
            result.y += parent.offsetTop;
            var parentTagName = parent.tagName.toLowerCase();
            if (parentTagName != "table" &&
                parentTagName != "body" && 
                parentTagName != "html" && 
                parentTagName != "div" && 
                parent.clientTop && 
                parent.clientLeft) {
                result.x += parent.clientLeft;
                result.y += parent.clientTop;
            }
            parent = parent.offsetParent;
        }
    }
    else if (element.left && element.top) {
        result.x = element.left;
        result.y = element.top;
    }
    else {
        if (element.x) {
            result.x = element.x;
        }
        if (element.y) {
            result.y = element.y;
        }
    }
    if (element.offsetWidth && element.offsetHeight) {
        result.width = element.offsetWidth;
        result.height = element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && element.style.pixelHeight) {
        result.width = element.style.pixelWidth;
        result.height = element.style.pixelHeight;
    }
    return result;
}
function WebForm_GetParentByTagName(element, tagName) {
    var parent = element.parentNode;
    var upperTagName = tagName.toUpperCase();
    while (parent && (parent.tagName.toUpperCase() != upperTagName)) {
        parent = parent.parentNode ? parent.parentNode : parent.parentElement;
    }
    return parent;
}
function WebForm_SetElementHeight(element, height) {
    if (element && element.style) {
        element.style.height = height + "px";
    }
}
function WebForm_SetElementWidth(element, width) {
    if (element && element.style) {
        element.style.width = width + "px";
    }
}
function WebForm_SetElementX(element, x) {
    if (element && element.style) {
        element.style.left = x + "px";
    }
}
function WebForm_SetElementY(element, y) {
    if (element && element.style) {
        element.style.top = y + "px";
    }
}

var Page_ValidationVer = "125";
var Page_IsValid = true;
var Page_BlockSubmit = false;
var Page_InvalidControlToBeFocused = null;
function ValidatorUpdateDisplay(val) {
    if (typeof(val.display) == "string") {
        if (val.display == "None") {
            return;
        }
        if (val.display == "Dynamic") {
            val.style.display = val.isvalid ? "none" : "inline";
            return;
        }
    }
    if ((navigator.userAgent.indexOf("Mac") > -1) &&
        (navigator.userAgent.indexOf("MSIE") > -1)) {
        val.style.display = "inline";
    }
    val.style.visibility = val.isvalid ? "hidden" : "visible";
}
function ValidatorUpdateIsValid() {
    Page_IsValid = AllValidatorsValid(Page_Validators);
}
function AllValidatorsValid(validators) {
    if ((typeof(validators) != "undefined") && (validators != null)) {
        var i;
        for (i = 0; i < validators.length; i++) {
            if (!validators[i].isvalid) {
                return false;
            }
        }
    }
    return true;
}
function ValidatorHookupControlID(controlID, val) {
    if (typeof(controlID) != "string") {
        return;
    }
    var ctrl = document.getElementById(controlID);
    if ((typeof(ctrl) != "undefined") && (ctrl != null)) {
        ValidatorHookupControl(ctrl, val);
    }
    else {
        val.isvalid = true;
        val.enabled = false;
    }
}
function ValidatorHookupControl(control, val) {
    if (typeof(control.tagName) != "string") {
        return;  
    }
    if (control.tagName != "INPUT" && control.tagName != "TEXTAREA" && control.tagName != "SELECT") {
        var i;
        for (i = 0; i < control.childNodes.length; i++) {
            ValidatorHookupControl(control.childNodes[i], val);
        }
        return;
    }
    else {
        if (typeof(control.Validators) == "undefined") {
            control.Validators = new Array;
            var eventType;
            if (control.type == "radio") {
                eventType = "onclick";
            } else {
                eventType = "onchange";
                if (typeof(val.focusOnError) == "string" && val.focusOnError == "t") {
                    ValidatorHookupEvent(control, "onblur", "ValidatedControlOnBlur(event); ");
                }
            }
            ValidatorHookupEvent(control, eventType, "ValidatorOnChange(event); ");
            if (control.type == "text" ||
                control.type == "password" ||
                control.type == "file") {
                ValidatorHookupEvent(control, "onkeypress", 
                    "if (!ValidatedTextBoxOnKeyPress(event)) { event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } ");
            }
        }
        control.Validators[control.Validators.length] = val;
    }
}
function ValidatorHookupEvent(control, eventType, functionPrefix) {
    var ev;
    eval("ev = control." + eventType + ";");
    if (typeof(ev) == "function") {
        ev = ev.toString();
        ev = ev.substring(ev.indexOf("{") + 1, ev.lastIndexOf("}"));
    }
    else {
        ev = "";
    }
    var func;
    if (navigator.appName.toLowerCase().indexOf('explorer') > -1) {
        func = new Function(functionPrefix + " " + ev);
    }
    else {
        func = new Function("event", functionPrefix + " " + ev);
    }
    eval("control." + eventType + " = func;");
}
function ValidatorGetValue(id) {
    var control;
    control = document.getElementById(id);
    if (typeof(control.value) == "string") {
        return control.value;
    }
    return ValidatorGetValueRecursive(control);
}
function ValidatorGetValueRecursive(control)
{
    if (typeof(control.value) == "string" && (control.type != "radio" || control.checked == true)) {
        return control.value;
    }
    var i, val;
    for (i = 0; i<control.childNodes.length; i++) {
        val = ValidatorGetValueRecursive(control.childNodes[i]);
        if (val != "") return val;
    }
    return "";
}
function Page_ClientValidate(validationGroup) {
    Page_InvalidControlToBeFocused = null;
    if (typeof(Page_Validators) == "undefined") {
        return true;
    }
    var i;
    for (i = 0; i < Page_Validators.length; i++) {
        ValidatorValidate(Page_Validators[i], validationGroup, null);
    }
    ValidatorUpdateIsValid();
    ValidationSummaryOnSubmit(validationGroup);
    Page_BlockSubmit = !Page_IsValid;
    return Page_IsValid;
}
function ValidatorCommonOnSubmit() {
    Page_InvalidControlToBeFocused = null;
    var result = !Page_BlockSubmit;
    if ((typeof(window.event) != "undefined") && (window.event != null)) {
        window.event.returnValue = result;
    }
    Page_BlockSubmit = false;
    return result;
}
function ValidatorEnable(val, enable) {
    val.enabled = (enable != false);
    ValidatorValidate(val);
    ValidatorUpdateIsValid();
}
function ValidatorOnChange(event) {
    if (!event) {
        event = window.event;
    }
    Page_InvalidControlToBeFocused = null;
    var targetedControl;
    if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
        targetedControl = event.srcElement;
    }
    else {
        targetedControl = event.target;
    }
    var vals;
    if (typeof(targetedControl.Validators) != "undefined") {
        vals = targetedControl.Validators;
    }
    else {
        if (targetedControl.tagName.toLowerCase() == "label") {
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;
        }
    }
    var i;
    for (i = 0; i < vals.length; i++) {
        ValidatorValidate(vals[i], null, event);
    }
    ValidatorUpdateIsValid();
}
function ValidatedTextBoxOnKeyPress(event) {
    if (event.keyCode == 13) {
        ValidatorOnChange(event);
        var vals;
        if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
            vals = event.srcElement.Validators;
        }
        else {
            vals = event.target.Validators;
        }
        return AllValidatorsValid(vals);
    }
    return true;
}
function ValidatedControlOnBlur(event) {
    var control;
    if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
        control = event.srcElement;
    }
    else {
        control = event.target;
    }
    if ((typeof(control) != "undefined") && (control != null) && (Page_InvalidControlToBeFocused == control)) {
        control.focus();
        Page_InvalidControlToBeFocused = null;
    }
}
function ValidatorValidate(val, validationGroup, event) {
    val.isvalid = true;
    if ((typeof(val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {
        if (typeof(val.evaluationfunction) == "function") {
            val.isvalid = val.evaluationfunction(val);
            if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
                typeof(val.focusOnError) == "string" && val.focusOnError == "t") {
                ValidatorSetFocus(val, event);
            }
        }
    }
    ValidatorUpdateDisplay(val);
}
function ValidatorSetFocus(val, event) {
    var ctrl;
    if (typeof(val.controlhookup) == "string") {
        var eventCtrl;
        if ((typeof(event) != "undefined") && (event != null)) {
            if ((typeof(event.srcElement) != "undefined") && (event.srcElement != null)) {
                eventCtrl = event.srcElement;
            }
            else {
                eventCtrl = event.target;
            }
        }
        if ((typeof(eventCtrl) != "undefined") && (eventCtrl != null) &&
            (typeof(eventCtrl.id) == "string") &&
            (eventCtrl.id == val.controlhookup)) {
            ctrl = eventCtrl;
        }
    }
    if ((typeof(ctrl) == "undefined") || (ctrl == null)) {
        ctrl = document.getElementById(val.controltovalidate);
    }
    if ((typeof(ctrl) != "undefined") && (ctrl != null) &&
        (ctrl.tagName.toLowerCase() != "table" || (typeof(event) == "undefined") || (event == null)) && 
        ((ctrl.tagName.toLowerCase() != "input") || (ctrl.type.toLowerCase() != "hidden")) &&
        (typeof(ctrl.disabled) == "undefined" || ctrl.disabled == null || ctrl.disabled == false) &&
        (typeof(ctrl.visible) == "undefined" || ctrl.visible == null || ctrl.visible != false) &&
        (IsInVisibleContainer(ctrl))) {
        if ((ctrl.tagName.toLowerCase() == "table" && (typeof(__nonMSDOMBrowser) == "undefined" || __nonMSDOMBrowser)) ||
            (ctrl.tagName.toLowerCase() == "span")) {
            var inputElements = ctrl.getElementsByTagName("input");
            var lastInputElement  = inputElements[inputElements.length -1];
            if (lastInputElement != null) {
                ctrl = lastInputElement;
            }
        }
        if (typeof(ctrl.focus) != "undefined" && ctrl.focus != null) {
            ctrl.focus();
            Page_InvalidControlToBeFocused = ctrl;
        }
    }
}
function IsInVisibleContainer(ctrl) {
    if (typeof(ctrl.style) != "undefined" &&
        ( ( typeof(ctrl.style.display) != "undefined" &&
            ctrl.style.display == "none") ||
          ( typeof(ctrl.style.visibility) != "undefined" &&
            ctrl.style.visibility == "hidden") ) ) {
        return false;
    }
    else if (typeof(ctrl.parentNode) != "undefined" &&
             ctrl.parentNode != null &&
             ctrl.parentNode != ctrl) {
        return IsInVisibleContainer(ctrl.parentNode);
    }
    return true;
}
function IsValidationGroupMatch(control, validationGroup) {
    if ((typeof(validationGroup) == "undefined") || (validationGroup == null)) {
        return true;
    }
    var controlGroup = "";
    if (typeof(control.validationGroup) == "string") {
        controlGroup = control.validationGroup;
    }
    return (controlGroup == validationGroup);
}
function ValidatorOnLoad() {
    if (typeof(Page_Validators) == "undefined")
        return;
    var i, val;
    for (i = 0; i < Page_Validators.length; i++) {
        val = Page_Validators[i];
        if (typeof(val.evaluationfunction) == "string") {
            eval("val.evaluationfunction = " + val.evaluationfunction + ";");
        }
        if (typeof(val.isvalid) == "string") {
            if (val.isvalid == "False") {
                val.isvalid = false;
                Page_IsValid = false;
            }
            else {
                val.isvalid = true;
            }
        } else {
            val.isvalid = true;
        }
        if (typeof(val.enabled) == "string") {
            val.enabled = (val.enabled != "False");
        }
        if (typeof(val.controltovalidate) == "string") {
            ValidatorHookupControlID(val.controltovalidate, val);
        }
        if (typeof(val.controlhookup) == "string") {
            ValidatorHookupControlID(val.controlhookup, val);
        }
    }
    Page_ValidationActive = true;
}
function ValidatorConvert(op, dataType, val) {
    function GetFullYear(year) {
        var twoDigitCutoffYear = val.cutoffyear % 100;
        var cutoffYearCentury = val.cutoffyear - twoDigitCutoffYear;
        return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year));
    }
    var num, cleanInput, m, exp;
    if (dataType == "Integer") {
        exp = /^\s*[-\+]?\d+\s*$/;
        if (op.match(exp) == null)
            return null;
        num = parseInt(op, 10);
        return (isNaN(num) ? null : num);
    }
    else if(dataType == "Double") {
        exp = new RegExp("^\\s*([-\\+])?(\\d*)\\" + val.decimalchar + "?(\\d*)\\s*$");
        m = op.match(exp);
        if (m == null)
            return null;
        if (m[2].length == 0 && m[3].length == 0)
            return null;
        cleanInput = (m[1] != null ? m[1] : "") + (m[2].length>0 ? m[2] : "0") + (m[3].length>0 ? "." + m[3] : "");
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num);
    }
    else if (dataType == "Currency") {
        var hasDigits = (val.digits > 0);
        var beginGroupSize, subsequentGroupSize;
        var groupSizeNum = parseInt(val.groupsize, 10);
        if (!isNaN(groupSizeNum) && groupSizeNum > 0) {
            beginGroupSize = "{1," + groupSizeNum + "}";
            subsequentGroupSize = "{" + groupSizeNum + "}";
        }
        else {
            beginGroupSize = subsequentGroupSize = "+";
        }
        exp = new RegExp("^\\s*([-\\+])?((\\d" + beginGroupSize + "(\\" + val.groupchar + "\\d" + subsequentGroupSize + ")+)|\\d*)"
                        + (hasDigits ? "\\" + val.decimalchar + "?(\\d{0," + val.digits + "})" : "")
                        + "\\s*$");
        m = op.match(exp);
        if (m == null)
            return null;
        if (m[2].length == 0 && hasDigits && m[5].length == 0)
            return null;
        cleanInput = (m[1] != null ? m[1] : "") + m[2].replace(new RegExp("(\\" + val.groupchar + ")", "g"), "") + ((hasDigits && m[5].length > 0) ? "." + m[5] : "");
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num);
    }
    else if (dataType == "Date") {
        var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$");
        m = op.match(yearFirstExp);
        var day, month, year;
        if (m != null && (m[2].length == 4 || val.dateorder == "ymd")) {
            day = m[6];
            month = m[5];
            year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10))
        }
        else {
            if (val.dateorder == "ymd"){
                return null;
            }
            var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$");
            m = op.match(yearLastExp);
            if (m == null) {
                return null;
            }
            if (val.dateorder == "mdy") {
                day = m[3];
                month = m[1];
            }
            else {
                day = m[1];
                month = m[3];
            }
            year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10))
        }
        month -= 1;
        var date = new Date(year, month, day);
        if (year < 100) {
            date.setFullYear(year);
        }
        return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
    }
    else {
        return op.toString();
    }
}
function ValidatorCompare(operand1, operand2, operator, val) {
    var dataType = val.type;
    var op1, op2;
    if ((op1 = ValidatorConvert(operand1, dataType, val)) == null)
        return false;
    if (operator == "DataTypeCheck")
        return true;
    if ((op2 = ValidatorConvert(operand2, dataType, val)) == null)
        return true;
    switch (operator) {
        case "NotEqual":
            return (op1 != op2);
        case "GreaterThan":
            return (op1 > op2);
        case "GreaterThanEqual":
            return (op1 >= op2);
        case "LessThan":
            return (op1 < op2);
        case "LessThanEqual":
            return (op1 <= op2);
        default:
            return (op1 == op2);
    }
}
function CompareValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    if (ValidatorTrim(value).length == 0)
        return true;
    var compareTo = "";
    if ((typeof(val.controltocompare) != "string") ||
        (typeof(document.getElementById(val.controltocompare)) == "undefined") ||
        (null == document.getElementById(val.controltocompare))) {
        if (typeof(val.valuetocompare) == "string") {
            compareTo = val.valuetocompare;
        }
    }
    else {
        compareTo = ValidatorGetValue(val.controltocompare);
    }
    var operator = "Equal";
    if (typeof(val.operator) == "string") {
        operator = val.operator;
    }
    return ValidatorCompare(value, compareTo, operator, val);
}
function CustomValidatorEvaluateIsValid(val) {
    var value = "";
    if (typeof(val.controltovalidate) == "string") {
        value = ValidatorGetValue(val.controltovalidate);
        if ((ValidatorTrim(value).length == 0) &&
            ((typeof(val.validateemptytext) != "string") || (val.validateemptytext != "true"))) {
            return true;
        }
    }
    var args = { Value:value, IsValid:true };
    if (typeof(val.clientvalidationfunction) == "string") {
        eval(val.clientvalidationfunction + "(val, args) ;");
    }
    return args.IsValid;
}
function RegularExpressionValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    if (ValidatorTrim(value).length == 0)
        return true;
    var rx = new RegExp(val.validationexpression);
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}
function ValidatorTrim(s) {
    var m = s.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}
function RequiredFieldValidatorEvaluateIsValid(val) {
    return (ValidatorTrim(ValidatorGetValue(val.controltovalidate)) != ValidatorTrim(val.initialvalue))
}
function RangeValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    if (ValidatorTrim(value).length == 0)
        return true;
    return (ValidatorCompare(value, val.minimumvalue, "GreaterThanEqual", val) &&
            ValidatorCompare(value, val.maximumvalue, "LessThanEqual", val));
}
function ValidationSummaryOnSubmit(validationGroup) {
    if (typeof(Page_ValidationSummaries) == "undefined")
        return;
    var summary, sums, s;
    for (sums = 0; sums < Page_ValidationSummaries.length; sums++) {
        summary = Page_ValidationSummaries[sums];
        summary.style.display = "none";
        if (!Page_IsValid && IsValidationGroupMatch(summary, validationGroup)) {
            var i;
            if (summary.showsummary != "False") {
                summary.style.display = "";
                if (typeof(summary.displaymode) != "string") {
                    summary.displaymode = "BulletList";
                }
                switch (summary.displaymode) {
                    case "List":
                        headerSep = "<br>";
                        first = "";
                        pre = "";
                        post = "<br>";
                        end = "";
                        break;
                    case "BulletList":
                    default:
                        headerSep = "";
                        first = "<ul>";
                        pre = "<li>";
                        post = "</li>";
                        end = "</ul>";
                        break;
                    case "SingleParagraph":
                        headerSep = " ";
                        first = "";
                        pre = "";
                        post = " ";
                        end = "<br>";
                        break;
                }
                s = "";
                if (typeof(summary.headertext) == "string") {
                    s += summary.headertext + headerSep;
                }
                s += first;
                for (i=0; i<Page_Validators.length; i++) {
                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {
                        s += pre + Page_Validators[i].errormessage + post;
                    }
                }
                s += end;
                summary.innerHTML = s;
                window.scrollTo(0,0);
            }
            if (summary.showmessagebox == "True") {
                s = "";
                if (typeof(summary.headertext) == "string") {
                    s += summary.headertext + "\r\n";
                }
                var lastValIndex = Page_Validators.length - 1;
                for (i=0; i<=lastValIndex; i++) {
                    if (!Page_Validators[i].isvalid && typeof(Page_Validators[i].errormessage) == "string") {
                        switch (summary.displaymode) {
                            case "List":
                                s += Page_Validators[i].errormessage;
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "BulletList":
                            default:
                                s += "- " + Page_Validators[i].errormessage;
                                if (i < lastValIndex) {
                                    s += "\r\n";
                                }
                                break;
                            case "SingleParagraph":
                                s += Page_Validators[i].errormessage + " ";
                                break;
                        }
                    }
                }
                alert(s);
            }
        }
    }
}

function WebForm_FindFirstFocusableChild(control) {
    if (!control || !(control.tagName)) {
        return null;
    }
    var tagName = control.tagName.toLowerCase();
    if (tagName == "undefined") {
        return null;
    }
    var children = control.childNodes;
    if (children) {
        for (var i = 0; i < children.length; i++) {
            try {
                if (WebForm_CanFocus(children[i])) {
                    return children[i];
                }
                else {
                    var focused = WebForm_FindFirstFocusableChild(children[i]);
                    if (WebForm_CanFocus(focused)) {
                        return focused;
                    }
                }
            } catch (e) {
            }
        }
    }
    return null;
}
function WebForm_AutoFocus(focusId) {
    var targetControl;
    if (__nonMSDOMBrowser) {
        targetControl = document.getElementById(focusId);
    }
    else {
        targetControl = document.all[focusId];
    }
    var focused = targetControl;
    if (targetControl && (!WebForm_CanFocus(targetControl)) ) {
        focused = WebForm_FindFirstFocusableChild(targetControl);
    }
    if (focused) {
        try {
            focused.focus();
            if (__nonMSDOMBrowser) {
                focused.scrollIntoView(false);
            }
            if (window.__smartNav) {
                window.__smartNav.ae = focused.id;
            }
        }
        catch (e) {
        }
    }
}
function WebForm_CanFocus(element) {
    if (!element || !(element.tagName)) return false;
    var tagName = element.tagName.toLowerCase();
    return (!(element.disabled) &&
            (!(element.type) || element.type.toLowerCase() != "hidden") &&
            WebForm_IsFocusableTag(tagName) &&
            WebForm_IsInVisibleContainer(element)
            );
}
function WebForm_IsFocusableTag(tagName) {
    return (tagName == "input" ||
            tagName == "textarea" ||
            tagName == "select" ||
            tagName == "button" ||
            tagName == "a");
}
function WebForm_IsInVisibleContainer(ctrl) {
    var current = ctrl;
    while((typeof(current) != "undefined") && (current != null)) {
        if (current.disabled ||
            ( typeof(current.style) != "undefined" &&
            ( ( typeof(current.style.display) != "undefined" &&
                current.style.display == "none") ||
                ( typeof(current.style.visibility) != "undefined" &&
                current.style.visibility == "hidden") ) ) ) {
            return false;
        }
        if (typeof(current.parentNode) != "undefined" &&
                current.parentNode != null &&
                current.parentNode != current &&
                current.parentNode.tagName.toLowerCase() != "body") {
            current = current.parentNode;
        }
        else {
            return true;
        }
    }
    return true;
}

var _gaq = _gaq || [];

_gaq.push
(
  ['_setAccount', 'UA-1792490-1'],
  ['_trackPageview']
);

_gaq.push
(
  function()
  {
    try
    {
      new Image().src = 'http://counter.yadro.ru/hit?r' + escape(document.referrer) + ((typeof (screen) == 'undefined') ? '' : ';s' + screen.width + '*' + screen.height + '*' + (screen.colorDepth ? screen.colorDepth : screen.pixelDepth)) + ';u' + escape(document.URL) + ';h' + escape(document.title.substring(0, 80)) + ';' + Math.random();
    }
    catch (e)
    {
    }
    try
    {
      new Image().src = 'http://da.c8.bd.a0.top.list.ru/counter?id=887349;js=10;r=' + escape(document.referrer) + ';rand=' + Math.random();
    }
    catch (e)
    {
    }

    try
    {
      new Image().src = 'http://counter.rambler.ru/top100.cnt?713998';
    }
    catch (e)
    {
    }
  }
);

(function(){var aa="_gat",ba="_gaq",r=true,v=false,w=undefined,ca=document,da="4.7.2",y="length",z="cookie",A="location",ea="_gaUserPrefs",fa="ioo",B="&",C="=",D="__utma=",F="__utmb=",G="__utmc=",ga="__utmk=",H="__utmv=",K="__utmz=",L="__utmx=",ha="GASO=";var M=function(i){return w==i||"-"==i||""==i},ia=function(i){return i[y]>0&&" \n\r\t".indexOf(i)>-1},O=function(i,f,m){var u="-",l;if(!M(i)&&!M(f)&&!M(m)){l=i.indexOf(f);if(l>-1){m=i.indexOf(m,l);if(m<0)m=i[y];u=N(i,l+f.indexOf(C)+1,m)}}return u},ka=function(i){var f=v,m=0,u,l;if(!M(i)){f=r;for(u=0;u<i[y];u++){l=i.charAt(u);m+="."==l?1:0;f=f&&m<=1&&(0==u&&"-"==l||".0123456789".indexOf(l)>-1)}}return f},P=function(i,f){var m=encodeURIComponent;return m instanceof Function?f?encodeURI(i):m(i):escape(i)},
Q=function(i,f){var m=decodeURIComponent,u;i=i.split("+").join(" ");if(m instanceof Function)try{u=f?decodeURI(i):m(i)}catch(l){u=unescape(i)}else u=unescape(i);return u},R=function(i,f){return i.indexOf(f)>-1},S=function(i,f){i[i[y]]=f},U=function(i){return i.toLowerCase()},V=function(i,f){return i.split(f)},la=function(i,f){return i.indexOf(f)},N=function(i,f,m){m=w==m?i[y]:m;return i.substring(f,m)},ma=function(i,f){return i.join(f)},na=function(i){var f=1,m=0,u;if(!M(i)){f=0;for(u=i[y]-1;u>=0;u--){m=
i.charCodeAt(u);f=(f<<6&268435455)+m+(m<<14);m=f&266338304;f=m!=0?f^m>>21:f}}return f},oa=function(){var i=window,f=w;if(i&&i.gaGlobal&&i.gaGlobal.hid)f=i.gaGlobal.hid;else{f=W();i.gaGlobal=i.gaGlobal?i.gaGlobal:{};i.gaGlobal.hid=f}return f},W=function(){return Math.round(Math.random()*2147483647)},pa=function(i,f){var m=ca.createElement("script");m.type="text/javascript";m.src=i;if(f)m.id=f;(ca.getElementsByTagName("head")[0]||ca.getElementsByTagName("body")[0]).appendChild(m)};var ra=function(i,f){this.Wa=i;this.jb=f},sa=function(){function i(m){var u=[];m=m.split(",");for(var l,o=0;o<m.length;o++){l=m[o].split(":");u.push(new ra(l[0],l[1]))}return u}var f=this;f.Ba="utm_campaign";f.Ca="utm_content";f.Da="utm_id";f.Ea="utm_medium";f.Fa="utm_nooverride";f.Ga="utm_source";f.Ha="utm_term";f.Ia="gclid";f.Y=0;f.z=0;f.Ma=15768E6;f.pb=18E5;f.w=63072E6;f.oa=[];f.qa=[];f.ac="cse";f.bc="q";f.kb=5;f.R=i("daum:q,eniro:search_word,naver:query,images.google:q,google:q,yahoo:p,msn:q,bing:q,aol:query,aol:encquery,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,about:terms,mamma:query,alltheweb:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,aol:q,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,pchome:q,kvasir:q,sesam:q,ozu:q,terra:query,mynet:q,ekolay:q,rambler:words");
f.u=w;f.hb=v;f.h="/";f.S=100;f.ja="/__utm.gif";f.aa=1;f.ba=1;f.v="|";f.$=1;f.Na=1;f.Ka=1;f.c="auto";f.G=1;f.ma=1E3;f.wc=10;f.Hb=10;f.xc=0.2;f.o=w;f.a=document;f.e=window};var ta=function(i){function f(d,a,j,c){var n="",s=0;n=O(d,"2"+a,";");if(!M(n)){d=n.indexOf("^"+j+".");if(d<0)return["",0];n=N(n,d+j[y]+2);if(n.indexOf("^")>0)n=n.split("^")[0];j=n.split(":");n=j[1];s=parseInt(j[0],10);if(!c&&s<o.s)n=""}if(M(n))n="";return[n,s]}function m(d,a){return"^"+ma([[a,d[1]].join("."),d[0]],":")}function u(d,a){var j=d+"; path="+k.h+"; "+a+o.ab();k.a[z]=j}function l(d){var a=new Date;d=new Date(a.getTime()+d);return"expires="+d.toGMTString()+"; "}var o=this,k=i;o.s=(new Date).getTime();
var g=[D,F,G,K,H,L,ha];o.k=function(){var d=k.a[z];return k.o?o.Ob(d,k.o):d};o.Ob=function(d,a){var j=[],c,n;for(c=0;c<g[y];c++){n=f(d,g[c],a)[0];M(n)||(j[j[y]]=g[c]+n+";")}return j.join("")};o.m=function(d,a,j){var c=j>0?l(j):"";if(k.o){a=o.Yb(k.a[z],d,k.o,a,j);d="2"+d;c=j>0?l(k.w):""}u(d+a,c)};o.Yb=function(d,a,j,c,n){var s="";n=n||k.w;c=m([c,o.s+n*1],j);s=O(d,"2"+a,";");if(!M(s)){d=m(f(d,a,j,r),j);s=ma(s.split(d),"");return s=c+s}return c};o.ab=function(){return M(k.c)?"":"domain="+k.c+";"}};var ua=function(i){function f(q){q=q instanceof Array?q.join("."):"";return M(q)?"-":q}function m(q,b){var e=[],h;if(!M(q)){e=q.split(".");if(b)for(h=0;h<e[y];h++)ka(e[h])||(e[h]="-")}return e}function u(q,b,e){var h=c.K,p,t;for(p=0;p<h[y];p++){t=h[p][0];t+=M(b)?b:b+h[p][4];h[p][2](O(q,t,e))}}var l,o,k,g,d,a,j,c=this,n,s=i;c.j=new ta(i);c.gb=function(){return w==n||n==c.N()};c.k=function(){return c.j.k()};c.ha=function(){return d?d:"-"};c.sb=function(q){d=q};c.ua=function(q){n=ka(q)?q*1:"-"};c.ga=
function(){return f(a)};c.va=function(q){a=m(q)};c.Nb=function(){c.j.m(H,"",-1)};c.Zb=function(){return n?n:"-"};c.ab=function(){return M(s.c)?"":"domain="+s.c+";"};c.ea=function(){return f(l)};c.qb=function(q){l=m(q,1)};c.B=function(){return f(o)};c.ta=function(q){o=m(q,1)};c.fa=function(){return f(k)};c.rb=function(q){k=m(q,1)};c.ia=function(){return f(g)};c.tb=function(q){g=m(q);for(q=0;q<g[y];q++)if(q<4&&!ka(g[q]))g[q]="-"};c.Vb=function(){return j};c.qc=function(q){j=q};c.Kb=function(){l=[];
o=[];k=[];g=[];d=w;a=[];n=w};c.N=function(){var q="",b;for(b=0;b<c.K[y];b++)q+=c.K[b][1]();return na(q)};c.pa=function(q){var b=c.k(),e=v;if(b){u(b,q,";");c.ua(c.N());e=r}return e};c.mc=function(q){u(q,"",B);c.ua(O(q,ga,B))};c.uc=function(){var q=c.K,b=[],e;for(e=0;e<q[y];e++)S(b,q[e][0]+q[e][1]());S(b,ga+c.N());return b.join(B)};c.Bc=function(q,b){var e=c.K,h=s.h,p;c.pa(q);s.h=b;for(p=0;p<e[y];p++)M(e[p][1]())||e[p][3]();s.h=h};c.Ab=function(){c.j.m(D,c.ea(),s.w)};c.ya=function(){c.j.m(F,c.B(),s.pb)};
c.Bb=function(){c.j.m(G,c.fa(),0)};c.Aa=function(){c.j.m(K,c.ia(),s.Ma)};c.Cb=function(){c.j.m(L,c.ha(),s.w)};c.za=function(){c.j.m(H,c.ga(),s.w)};c.Dc=function(){c.j.m(ha,c.Vb(),0)};c.K=[[D,c.ea,c.qb,c.Ab,"."],[F,c.B,c.ta,c.ya,""],[G,c.fa,c.rb,c.Bb,""],[L,c.ha,c.sb,c.Cb,""],[K,c.ia,c.tb,c.Aa,"."],[H,c.ga,c.va,c.za,"."]]};var wa=function(i){var f=this,m=i,u=new ua(m),l=!X.Cc(),o=function(){},k=function(g){var d=(new Date).getTime(),a;a=(d-g[3])*(m.xc/1E3);if(a>=1){g[2]=Math.min(Math.floor(g[2]*1+a),m.Hb);g[3]=d}return g};f.F=function(g,d,a,j,c,n){var s,q=m.G,b=m.a[A];u.pa(a);s=V(u.B(),".");if(s[1]<500||j){if(c)s=k(s);if(j||!c||s[2]>=1){if(!j&&c)s[2]=s[2]*1-1;s[1]=s[1]*1+1;g="?utmwv="+da+"&utmn="+W()+(M(b.hostname)?"":"&utmhn="+P(b.hostname))+(m.S==100?"":"&utmsp="+P(m.S))+g;if(0==q||2==q){j=2==q?o:n||o;l&&f.Ta(m.ja+
g,j)}if(1==q||2==q){g=("https:"==b.protocol?"https://ssl.google-analytics.com/__utm.gif":"http://www.google-analytics.com/__utm.gif")+g+"&utmac="+d+"&utmcc="+f.Rb(a);if(va)g+="&gaq=1";if(X.Va)g+="&aip=1";l&&f.Ta(g,n)}}}u.ta(s.join("."));u.ya()};f.Ta=function(g,d){var a=new Image(1,1);a.src=g;a.onload=function(){a.onload=null;(d||o)()}};f.Rb=function(g){var d=[],a=[D,K,H,L],j,c=u.k(),n;for(j=0;j<a[y];j++){n=O(c,a[j]+g,";");if(!M(n)){if(a[j]==H){n=V(n.split(g+".")[1],"|")[0];if(M(n))continue;n=g+"."+
n}S(d,a[j]+n+";")}}return P(d.join("+"))}};var Y=function(){var i=this;i.W=[];i.db=function(f){var m,u=i.W,l;for(l=0;l<u.length;l++)m=f==u[l].q?u[l]:m;return m};i.Gb=function(f,m,u,l,o,k,g,d){var a=i.db(f);if(w==a){a=new Y.Eb(f,m,u,l,o,k,g,d);S(i.W,a)}else{a.Ja=m;a.xb=u;a.wb=l;a.ub=o;a.Qa=k;a.vb=g;a.Sa=d}return a}};Y.Db=function(i,f,m,u,l,o){var k=this;k.zb=i;k.wa=f;k.r=m;k.Oa=u;k.mb=l;k.nb=o;k.xa=function(){return"&"+["utmt=item","tid="+P(k.zb),"ipc="+P(k.wa),"ipn="+P(k.r),"iva="+P(k.Oa),"ipr="+P(k.mb),"iqt="+P(k.nb)].join("&utm")}};
Y.Eb=function(i,f,m,u,l,o,k,g){var d=this;d.q=i;d.Ja=f;d.xb=m;d.wb=u;d.ub=l;d.Qa=o;d.vb=k;d.Sa=g;d.P=[];d.Fb=function(a,j,c,n,s){var q=d.Wb(a),b=d.q;if(w==q)S(d.P,new Y.Db(b,a,j,c,n,s));else{q.zb=b;q.wa=a;q.r=j;q.Oa=c;q.mb=n;q.nb=s}};d.Wb=function(a){var j,c=d.P,n;for(n=0;n<c.length;n++)j=a==c[n].wa?c[n]:j;return j};d.xa=function(){return"&"+["utmt=tran","id="+P(d.q),"st="+P(d.Ja),"to="+P(d.xb),"tx="+P(d.wb),"sp="+P(d.ub),"ci="+P(d.Qa),"rg="+P(d.vb),"co="+P(d.Sa)].join("&utmt")}};var xa=function(i){function f(){var k,g,d;g="ShockwaveFlash";var a="$version",j=l.d?l.d.plugins:w;if(j&&j[y]>0)for(k=0;k<j[y]&&!d;k++){g=j[k];if(R(g.name,"Shockwave Flash"))d=g.description.split("Shockwave Flash ")[1]}else{g=g+"."+g;try{k=new ActiveXObject(g+".7");d=k.GetVariable(a)}catch(c){}if(!d)try{k=new ActiveXObject(g+".6");d="WIN 6,0,21,0";k.AllowScriptAccess="always";d=k.GetVariable(a)}catch(n){}if(!d)try{k=new ActiveXObject(g);d=k.GetVariable(a)}catch(s){}if(d){d=V(d.split(" ")[1],",");d=
d[0]+"."+d[1]+" r"+d[2]}}return d?d:o}var m=i,u=m.e,l=this,o="-";l.T=u.screen;l.La=!l.T&&u.java?java.awt.Toolkit.getDefaultToolkit():w;l.d=u.navigator;l.U=o;l.sa=o;l.Pa=o;l.la=o;l.ka=1;l.Za=o;l.Sb=function(){var k;if(u.screen){l.U=l.T.width+"x"+l.T.height;l.sa=l.T.colorDepth+"-bit"}else if(l.La)try{k=l.La.getScreenSize();l.U=k.width+"x"+k.height}catch(g){}l.la=U(l.d&&l.d.language?l.d.language:l.d&&l.d.browserLanguage?l.d.browserLanguage:o);l.ka=l.d&&l.d.javaEnabled()?1:0;l.Za=m.ba?f():o;l.Pa=P(m.a.characterSet?
m.a.characterSet:m.a.charset?m.a.charset:o)};l.vc=function(){return B+"utm"+["cs="+P(l.Pa),"sr="+l.U,"sc="+l.sa,"ul="+l.la,"je="+l.ka,"fl="+P(l.Za)].join("&utm")};l.Qb=function(){var k=m.a,g=u.history[y];k=l.d.appName+l.d.version+l.la+l.d.platform+l.d.userAgent+l.ka+l.U+l.sa+(k[z]?k[z]:"")+(k.referrer?k.referrer:"");for(var d=k[y];g>0;)k+=g--^d++;return na(k)}};var Z=function(i,f,m,u){function l(d){var a="";d=U(d.split("://")[1]);if(R(d,"/")){d=d.split("/")[1];if(R(d,"?"))a=d.split("?")[0]}return a}function o(d){var a="";a=U(d.split("://")[1]);if(R(a,"/"))a=a.split("/")[0];return a}var k=u,g=this;g.b=i;g.ob=f;g.s=m;g.cb=function(d){var a=g.da();return new Z.t(O(d,k.Da+C,B),O(d,k.Ga+C,B),O(d,k.Ia+C,B),g.O(d,k.Ba,"(not set)"),g.O(d,k.Ea,"(not set)"),g.O(d,k.Ha,a&&!M(a.I)?Q(a.I):w),g.O(d,k.Ca,w))};g.fb=function(d){var a=o(d),j=l(d);if(R(a,"google")){d=d.split("?").join(B);
if(R(d,B+k.bc+C))if(j==k.ac)return r}return v};g.da=function(){var d,a=g.ob,j,c,n=k.R;if(!(M(a)||"0"==a||!R(a,"://")||g.fb(a))){d=o(a);for(j=0;j<n[y];j++){c=n[j];if(R(d,U(c.Wa))){a=a.split("?").join(B);if(R(a,B+c.jb+C)){d=a.split(B+c.jb+C)[1];if(R(d,B))d=d.split(B)[0];return new Z.t(w,c.Wa,w,"(organic)","organic",d,w)}}}}};g.O=function(d,a,j){d=O(d,a+C,B);return j=!M(d)?Q(d):!M(j)?j:"-"};g.hc=function(d){var a=k.oa,j=v,c;if(d&&"organic"==d.Q){d=U(Q(d.I));for(c=0;c<a[y];c++)j=j||U(a[c])==d}return j};
g.bb=function(){var d="",a="";d=g.ob;if(!(M(d)||"0"==d||!R(d,"://")||g.fb(d))){d=d.split("://")[1];if(R(d,"/")){a=N(d,d.indexOf("/"));a=a.split("?")[0];d=U(d.split("/")[0])}if(0==d.indexOf("www."))d=N(d,4);return new Z.t(w,d,w,"(referral)","referral",w,a)}};g.$a=function(d){var a="";if(k.Y){a=d&&d.hash?d.href.substring(d.href.indexOf("#")):"";a=""!=a?a+B:a}a+=d.search;return a};g.Tb=function(){return new Z.t(w,"(direct)",w,"(direct)","(none)",w,w)};g.ic=function(d){var a=v,j,c=k.qa;if(d&&"referral"==
d.Q){d=U(P(d.V));for(j=0;j<c[y];j++)a=a||R(d,U(c[j]))}return a};g.l=function(d){return w!=d&&d.ib()};g.isNewCampaign=function(d){d=O(d,K+g.b+".",";");var a=d.split(".");d=new Z.t;d.lb(a.slice(4).join("."));if(!g.l(d))return true;a=k.a[A];a=g.$a(a);a=g.cb(a);if(!g.l(a)){a=g.da();g.l(a)||(a=g.bb())}return g.l(a)&&U(d.J())!=U(a.J())};g.getCampaignInformation=function(d,a){if(k.Na){var j="",c="-",n,s=0,q,b,e=g.b;if(d){b=d.k();j=g.$a(k.a[A]);if(k.z&&d.gb()){c=d.ia();if(!M(c)&&!R(c,";")){d.Aa();return}}c=
O(b,K+e+".",";");n=g.cb(j);if(g.l(n)){j=O(j,k.Fa+C,B);if("1"==j&&!M(c))return}if(!g.l(n)){n=g.da();if(!M(c)&&g.hc(n))return}if(!g.l(n)&&a){n=g.bb();if(!M(c)&&g.ic(n))return}if(!g.l(n))if(M(c)&&a)n=g.Tb();if(g.l(n)){if(!M(c)){s=c.split(".");q=new Z.t;q.lb(s.slice(4).join("."));q=U(q.J())==U(n.J());s=s[3]*1}if(!q||a){b=O(b,D+e+".",";");q=b.lastIndexOf(".");b=q>9?N(b,q+1)*1:0;s++;b=0==b?1:b;d.tb([e,g.s,b,s,n.J()].join("."));d.Aa()}}}}}};
Z.t=function(i,f,m,u,l,o,k){var g=this;g.q=i;g.V=f;g.Z=m;g.r=u;g.Q=l;g.I=o;g.Ra=k;g.J=function(){var d=[],a=[["cid",g.q],["csr",g.V],["gclid",g.Z],["ccn",g.r],["cmd",g.Q],["ctr",g.I],["cct",g.Ra]],j,c;if(g.ib())for(j=0;j<a[y];j++)if(!M(a[j][1])){c=a[j][1].split("+").join("%20");c=c.split(" ").join("%20");S(d,"utm"+a[j][0]+C+c)}return d.join("|")};g.ib=function(){return!(M(g.q)&&M(g.V)&&M(g.Z))};g.lb=function(d){var a=function(j){return Q(O(d,"utm"+j+C,"|"))};g.q=a("cid");g.V=a("csr");g.Z=a("gclid");
g.r=a("ccn");g.Q=a("cmd");g.I=a("ctr");g.Ra=a("cct")}};var ya=function(i,f,m,u){function l(j,c,n){var s;if(!M(n)){n=n.split(",");for(var q=0;q<n[y];q++){s=n[q];if(!M(s)){s=s.split(g);if(s[y]==4)c[s[0]]=[s[1],s[2],j]}}}}var o=this,k=f,g=C,d=i,a=u;o.L=m;o.na="";o.p={};o.gc=function(){var j;j=V(O(o.L.k(),H+k+".",";"),k+".")[1];if(!M(j)){j=j.split("|");l(1,o.p,j[1]);o.na=j[0];o.X()}};o.X=function(){o.Ib();var j=o.na,c,n,s="";for(c in o.p)if((n=o.p[c])&&1===n[2])s+=c+g+n[0]+g+n[1]+g+1+",";M(s)||(j+="|"+s);if(M(j))o.L.Nb();else{o.L.va(k+"."+j);o.L.za()}};o.rc=
function(j){o.na=j;o.X()};o.pc=function(j,c,n,s){if(1!=s&&2!=s&&3!=s)s=3;var q=v;if(c&&n&&j>0&&j<=d.kb){c=P(c);n=P(n);if(c[y]+n[y]<=64){o.p[j]=[c,n,s];o.X();q=r}}return q};o.$b=function(j){if((j=o.p[j])&&1===j[2])return j[1]};o.Mb=function(j){var c=o.p;if(c[j]){delete c[j];o.X()}};o.Ib=function(){a._clearKey(8);a._clearKey(9);a._clearKey(11);var j=o.p,c,n;for(n in j)if(c=j[n]){a._setKey(8,n,c[0]);a._setKey(9,n,c[1]);(c=c[2])&&3!=c&&a._setKey(11,n,""+c)}}};var $=function(){function i(h,p,t,x){if(w==k[h])k[h]={};if(w==k[h][p])k[h][p]=[];k[h][p][t]=x}function f(h,p){if(w!=k[h]&&w!=k[h][p]){k[h][p]=w;var t=r,x;for(x=0;x<a[y];x++)if(w!=k[h][a[x]]){t=v;break}if(t)k[h]=w}}function m(h){var p="",t=v,x,E;for(x=0;x<a[y];x++){E=h[a[x]];if(w!=E){if(t)p+=a[x];p+=u(E);t=v}else t=r}return p}function u(h){var p=[],t,x;for(x=0;x<h[y];x++)if(w!=h[x]){t="";if(x!=e&&w==h[x-1])t+=x.toString()+s;t+=l(h[x]);S(p,t)}return j+p.join(n)+c}function l(h){var p="",t,x,E;for(t=
0;t<h[y];t++){x=h.charAt(t);E=b[x];p+=w!=E?E:x}return p}var o=this,k={},g="k",d="v",a=[g,d],j="(",c=")",n="*",s="!",q="'",b={};b[q]="'0";b[c]="'1";b[n]="'2";b[s]="'3";var e=1;o.dc=function(h){return w!=k[h]};o.D=function(){var h="",p;for(p in k)if(w!=k[p])h+=p.toString()+m(k[p]);return h};o.nc=function(h){if(h==w)return o.D();var p=h.D(),t;for(t in k)if(w!=k[t]&&!h.dc(t))p+=t.toString()+m(k[t]);return p};o._setKey=function(h,p,t){if(typeof t!="string")return v;i(h,g,p,t);return r};o._setValue=function(h,
p,t){if(typeof t!="number"&&(w==Number||!(t instanceof Number))||Math.round(t)!=t||t==NaN||t==Infinity)return v;i(h,d,p,t.toString());return r};o._getKey=function(h,p){return w!=k[h]&&w!=k[h][g]?k[h][g][p]:w};o._getValue=function(h,p){return w!=k[h]&&w!=k[h][d]?k[h][d][p]:w};o._clearKey=function(h){f(h,g)};o._clearValue=function(h){f(h,d)}};var za=function(i,f){var m=this;m.Fc=f;m.jc=i;m._trackEvent=function(u,l,o){return f._trackEvent(m.jc,u,l,o)}};var Aa=function(i,f,m){function u(){if("auto"==c.c){var b=c.a.domain;if("www."==N(b,0,4))b=N(b,4);c.c=b}c.c=U(c.c)}function l(){u();var b=c.c,e=b.indexOf("www.google.")*b.indexOf(".google.")*b.indexOf("google.");return e||"/"!=c.h||b.indexOf("google.org")>-1}function o(b,e,h){if(M(b)||M(e)||M(h))return"-";b=O(b,D+a.b+".",e);if(!M(b)){b=b.split(".");b[5]=b[5]?b[5]*1+1:1;b[3]=b[4];b[4]=h;b=b.join(".")}return b}function k(){return"file:"!=c.a[A].protocol&&l()}function g(b){if(!b||""==b)return"";for(;ia(b.charAt(0));)b=
N(b,1);for(;ia(b.charAt(b[y]-1));)b=N(b,0,b[y]-1);return b}function d(b,e,h,p){if(!M(b())){e(p?Q(b()):b());R(b(),";")||h()}}var a=this,j=w,c=new sa,n=v,s=w;a.e=window;a.r=i;a.s=Math.round((new Date).getTime()/1E3);a.n=f||"UA-XXXXX-X";a.Ua=c.a.referrer;a.ca=w;a.f=w;a.M=w;a.C=v;a.A=w;a.g=w;a.Xa=w;a.b=w;a.i=w;c.o=m?P(m):w;var q=function(b){var e,h=""!=b&&c.a[A].host!=b;if(h)for(e=0;e<c.u[y];e++)h=h&&la(U(b),U(c.u[e]))==-1;return h};a.lc=function(){if(!a.M)return null;var b=a.M.match(/^(?:\|([-0-9a-z.]{1,30})(?::(\d{4,5}))?\|)?([-.\w]{10,1200})$/i);
if(!b)return null;return{domain:b[1]||null,port:b[2]||null,token:b[3]}};a.Xb=function(){return W()^a.A.Qb()&2147483647};a.Ub=function(){if(!c.c||""==c.c||"none"==c.c){c.c="";return 1}u();return c.Ka?na(c.c):1};a.Pb=function(b,e){if(M(b))b="-";else{e+=c.h&&"/"!=c.h?c.h:"";var h=b.indexOf(e);b=h>=0&&h<=8?"0":"["==b.charAt(0)&&"]"==b.charAt(b[y]-1)?"-":b}return b};a.ra=function(b){var e="",h=c.a;e+=c.$?a.A.vc():"";e+=c.aa&&!M(h.title)?"&utmdt="+P(h.title):"";e+="&utmhid="+oa()+"&utmr="+P(a.ca)+"&utmp="+
P(a.oc(b));return e};a.oc=function(b){var e=c.a[A];return b=w!=b&&""!=b?P(b,r):P(e.pathname+e.search,r)};a.yc=function(b){if(a.H()){var e="";if(a.g!=w&&a.g.D()[y]>0)e+="&utme="+P(a.g.D());e+=a.ra(b);j.F(e,a.n,a.b)}};a.Lb=function(){var b=new ua(c);return b.pa(a.b)?b.uc():w};a._getLinkerUrl=function(b,e){var h=b.split("#"),p=b,t=a.Lb();if(t)if(e&&1>=h[y])p+="#"+t;else if(!e||1>=h[y])if(1>=h[y])p+=(R(b,"?")?B:"?")+t;else p=h[0]+(R(b,"?")?B:"?")+t+"#"+h[1];return p};a.sc=function(){var b=a.lc();if(b){a.i.qc(a.M);
a.i.Dc();X._gasoDomain=c.c;X._gasoCPath=c.h;var e="www.google.com";if(b.domain)e=b.domain+".google.com"+(b.port?":"+b.port:"");var h="https://www.google.com/analytics/reporting/overlay_js?gaso=";if(b.domain)h="https://"+e+"/analytics/reporting/overlay_js?gaso=";h+=b.token+B+W();pa(h,"_gasojs")}};a.cc=function(){var b=a.s,e=a.i,h=e.k(),p=a.b+"",t=c.e,x=t?t.gaGlobal:w,E,ja=R(h,D+p+"."),Ba=R(h,F+p),Ca=R(h,G+p),I,J=[],T="",qa=v;h=M(h)?"":h;if(c.z){E=c.a[A]&&c.a[A].hash?c.a[A].href.substring(c.a[A].href.indexOf("#")):
"";if(c.Y&&!M(E))T=E+B;T+=c.a[A].search;if(!M(T)&&R(T,D)){e.mc(T);e.gb()||e.Kb();I=e.ea()}d(e.ha,e.sb,e.Cb,true);d(e.ga,e.va,e.za)}if(M(I))if(ja)if(!Ba||!Ca||0){I=o(h,";",b);a.C=r}else{I=O(h,D+p+".",";");J=V(O(h,F+p,";"),".")}else{I=ma([p,a.Xb(),b,b,b,1],".");qa=a.C=r}else if(M(e.B())||M(e.fa())){I=o(T,B,b);a.C=r}else{J=V(e.B(),".");p=J[0]}I=I.split(".");if(t&&x&&x.dh==p&&!c.o){I[4]=x.sid?x.sid:I[4];if(qa){I[3]=x.sid?x.sid:I[4];if(x.vid){b=x.vid.split(".");I[1]=b[0];I[2]=b[1]}}}e.qb(I.join("."));
J[0]=p;J[1]=J[1]?J[1]:0;J[2]=w!=J[2]?J[2]:c.wc;J[3]=J[3]?J[3]:I[4];e.ta(J.join("."));e.rb(p);M(e.Zb())||e.ua(e.N());e.Ab();e.ya();e.Bb()};a.ec=function(){j=new wa(c)};a._getName=function(){return a.r};a._initData=function(){var b;if(!n){if(!a.A){a.A=new xa(c);a.A.Sb()}a.b=a.Ub();a.i=new ua(c);a.g=new $;s=new ya(c,a.b,a.i,a.g);a.ec()}if(k()){if(!n){a.ca=a.Pb(a.Ua,c.a.domain);b=new Z(a.b,a.ca,a.s,c)}a.cc(b);s.gc()}if(!n){k()&&b.getCampaignInformation(a.i,a.C);a.Xa=new $;n=r}a.fc()};a._visitCode=function(){a._initData();
var b=O(a.i.k(),D+a.b+".",";");b=b.split(".");return b[y]<4?"":b[1]};a._cookiePathCopy=function(b){a._initData();a.i&&a.i.Bc(a.b,b)};a.fc=function(){if(!X.eb){var b=c.a[A].hash;if(b&&1==b.indexOf("gaso="))b=O(b,"gaso=",B);else b=(b=c.e.name)&&0<=b.indexOf("gaso=")?O(b,"gaso=",B):O(a.i.k(),ha,";");if(b[y]>=10){a.M=b;a.sc()}X.eb=r}};a.H=function(){return a._visitCode()%1E4<c.S*100};a.tc=function(){var b,e,h=c.a.links;if(!c.hb){b=c.a.domain;if("www."==N(b,0,4))b=N(b,4);c.u.push("."+b)}for(b=0;b<h[y]&&
(c.ma==-1||b<c.ma);b++){e=h[b];if(q(e.host))if(!e.gatcOnclick){e.gatcOnclick=e.onclick?e.onclick:a.kc;e.onclick=function(p){var t=!this.target||this.target=="_self"||this.target=="_top"||this.target=="_parent";t=t&&!a.Jb(p);a.zc(p,this,t);return t?v:this.gatcOnclick?this.gatcOnclick(p):r}}}};a.kc=function(){};a._trackPageview=function(b){if(k()){a._initData();c.u&&a.tc();a.yc(b);a.C=v}};a._trackTrans=function(){var b=a.b,e=[],h,p,t;a._initData();if(a.f&&a.H()){for(h=0;h<a.f.W[y];h++){p=a.f.W[h];S(e,
p.xa());for(t=0;t<p.P[y];t++)S(e,p.P[t].xa())}for(h=0;h<e[y];h++)j.F(e[h],a.n,b,r)}};a._setTrans=function(){var b=c.a,e,h,p;b=b.getElementById?b.getElementById("utmtrans"):b.utmform&&b.utmform.utmtrans?b.utmform.utmtrans:w;a._initData();if(b&&b.value){a.f=new Y;p=b.value.split("UTM:");c.v=!c.v||""==c.v?"|":c.v;for(b=0;b<p[y];b++){p[b]=g(p[b]);e=p[b].split(c.v);for(h=0;h<e[y];h++)e[h]=g(e[h]);if("T"==e[0])a._addTrans(e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]);else"I"==e[0]&&a._addItem(e[1],e[2],e[3],
e[4],e[5],e[6])}}};a._addTrans=function(b,e,h,p,t,x,E,ja){a.f=a.f?a.f:new Y;return a.f.Gb(b,e,h,p,t,x,E,ja)};a._addItem=function(b,e,h,p,t,x){var E;a.f=a.f?a.f:new Y;(E=a.f.db(b))||(E=a._addTrans(b,"","","","","","",""));E.Fb(e,h,p,t,x)};a._setVar=function(b){if(b&&""!=b&&l()){a._initData();s.rc(P(b));a.H()&&j.F("&utmt=var",a.n,a.b)}};a._setCustomVar=function(b,e,h,p){a._initData();return s.pc(b,e,h,p)};a._deleteCustomVar=function(b){a._initData();s.Mb(b)};a._getVisitorCustomVar=function(b){a._initData();
return s.$b(b)};a._setMaxCustomVariables=function(b){c.kb=b};a._link=function(b,e){if(c.z&&b){a._initData();c.a[A].href=a._getLinkerUrl(b,e)}};a._linkByPost=function(b,e){if(c.z&&b&&b.action){a._initData();b.action=a._getLinkerUrl(b.action,e)}};a._setXKey=function(b,e,h){a.g._setKey(b,e,h)};a._setXValue=function(b,e,h){a.g._setValue(b,e,h)};a._getXKey=function(b,e){return a.g._getKey(b,e)};a._getXValue=function(b,e){return a.g.getValue(b,e)};a._clearXKey=function(b){a.g._clearKey(b)};a._clearXValue=
function(b){a.g._clearValue(b)};a._createXObj=function(){a._initData();return new $};a._sendXEvent=function(b){var e="";a._initData();if(a.H()){e+="&utmt=event&utme="+P(a.g.nc(b))+a.ra();j.F(e,a.n,a.b,v,r)}};a._createEventTracker=function(b){a._initData();return new za(b,a)};a._trackEvent=function(b,e,h,p){a._initData();var t=a.Xa;if(w!=b&&w!=e&&""!=b&&""!=e){t._clearKey(5);t._clearValue(5);(b=t._setKey(5,1,b)&&t._setKey(5,2,e)&&(w==h||t._setKey(5,3,h))&&(w==p||t._setValue(5,1,p)))&&a._sendXEvent(t)}else b=
v;return b};a.zc=function(b,e,h){a._initData();if(a.H()){var p=new $;p._setKey(6,1,e.href);var t=h?function(){a.Ya(b,e)}:w;j.F("&utmt=event&utme="+P(p.D())+a.ra(),a.n,a.b,v,r,t);h&&c.e.setTimeout(function(){a.Ya(b,e)},500)}};a.Ya=function(b,e){if(!b)b=c.e.event;var h=r;if(e.gatcOnclick)h=e.gatcOnclick(b);if(h||typeof h=="undefined")if(!e.target||e.target=="_self")c.e[A]=e.href;else if(e.target=="_top")c.e.top.document[A]=e.href;else if(e.target=="_parent")c.e.parent.document[A]=e.href};a.Jb=function(b){if(!b)b=
c.e.event;var e=b.shiftKey||b.ctrlKey||b.altKey;if(!e)if(b.modifiers&&c.e.Event)e=b.modifiers&c.e.Event.CONTROL_MASK||b.modifiers&c.e.Event.SHIFT_MASK||b.modifiers&c.e.Event.ALT_MASK;return e};a.Ec=function(){return c};a._setDomainName=function(b){c.c=b};a._addOrganic=function(b,e,h){c.R.splice(h?0:c.R.length,0,new ra(b,e))};a._clearOrganic=function(){c.R=[]};a._addIgnoredOrganic=function(b){S(c.oa,b)};a._clearIgnoredOrganic=function(){c.oa=[]};a._addIgnoredRef=function(b){S(c.qa,b)};a._clearIgnoredRef=
function(){c.qa=[]};a._setAllowHash=function(b){c.Ka=b?1:0};a._setCampaignTrack=function(b){c.Na=b?1:0};a._setClientInfo=function(b){c.$=b?1:0};a._getClientInfo=function(){return c.$};a._setCookiePath=function(b){c.h=b};a._setTransactionDelim=function(b){c.v=b};a._setCookieTimeout=function(b){a._setCampaignCookieTimeout(b*1E3)};a._setCampaignCookieTimeout=function(b){c.Ma=b};a._setDetectFlash=function(b){c.ba=b?1:0};a._getDetectFlash=function(){return c.ba};a._setDetectTitle=function(b){c.aa=b?1:
0};a._getDetectTitle=function(){return c.aa};a._setLocalGifPath=function(b){c.ja=b};a._getLocalGifPath=function(){return c.ja};a._setLocalServerMode=function(){c.G=0};a._setRemoteServerMode=function(){c.G=1};a._setLocalRemoteServerMode=function(){c.G=2};a._getServiceMode=function(){return c.G};a._setSampleRate=function(b){c.S=b};a._setSessionTimeout=function(b){a._setSessionCookieTimeout(b*1E3)};a._setSessionCookieTimeout=function(b){c.pb=b};a._setAllowLinker=function(b){c.z=b?1:0};a._setAllowAnchor=
function(b){c.Y=b?1:0};a._setCampNameKey=function(b){c.Ba=b};a._setCampContentKey=function(b){c.Ca=b};a._setCampIdKey=function(b){c.Da=b};a._setCampMediumKey=function(b){c.Ea=b};a._setCampNOKey=function(b){c.Fa=b};a._setCampSourceKey=function(b){c.Ga=b};a._setCampTermKey=function(b){c.Ha=b};a._setCampCIdKey=function(b){c.Ia=b};a._getAccount=function(){return a.n};a._setAccount=function(b){a.n=b};a._setNamespace=function(b){c.o=b?P(b):w};a._getVersion=function(){return da};a._setAutoTrackOutbound=
function(b){c.u=[];if(b)c.u=b};a._setTrackOutboundSubdomains=function(b){c.hb=b};a._setHrefExamineLimit=function(b){c.ma=b};a._setReferrerOverride=function(b){a.Ua=b};a._setCookiePersistence=function(b){a._setVisitorCookieTimeout(b)};a._setVisitorCookieTimeout=function(b){c.w=b}};var Da=function(){var i=this;i.Va=v;i.yb={};i.Ac=0;i.eb=v;i._gasoDomain=w;i._gasoCPath=w;i._getTracker=function(f,m){return i._createTracker(f,w,m)};i._createTracker=function(f,m,u){if(m==w)m="~"+X.Ac++;return X.yb[m]=new Aa(m,f,u)};i._getTrackerByName=function(f){f=f||"";return X.yb[f]||X._createTracker(undefined,f)};i.Cc=function(){var f=window[ea];return f&&f[fa]&&f[fa]()};i._anonymizeIp=function(){i.Va=r}};var va=v,Fa=function(){var i=this;i._createAsyncTracker=function(f,m){return X._createTracker(f,m||"")};i._getAsyncTracker=function(f){return X._getTrackerByName(f)};i.push=function(){var f=arguments,m=0;va=r;for(var u=0;u<f[y];u++)try{if(typeof f[u]==="function")f[u]();else{var l="",o=f[u][0],k=o.lastIndexOf(".");if(k>0){l=N(o,0,k);o=N(o,k+1)}var g=l==aa?X:l==ba?Ea:X._getTrackerByName(l);g[o].apply(g,f[u].slice(1))}}catch(d){m++}return m}};function Ga(){var i=window[aa];if(i&&typeof i._getTracker=="function")X=i;else window[aa]=X}function Ha(){var i=window[ba],f=v;if(i&&typeof i.push=="function"){f=i.constructor==Array;if(!f)return}window[ba]=Ea;f&&Ea.push.apply(Ea,i)}var X=new Da;Ga();var Ea=new Fa;Ha();})()

var Js_IsFlashEnabled = false;

function OpenWindow(URL,Name,Features) {
	window.open(URL,Name,Features);
}

function NumericEnsure() {
	var Key = window.event.keyCode; 
	if (Key < 48 && Key != 43 && Key != 45 && Key != 46 || Key > 57) {
		window.event.returnValue = false;
	}
}
function ShowHide(targetName) {
    targetName = String(targetName);
    //alert(targetName);
	if( document.getElementsByName ) {
		target = document.getElementsByName(targetName);
	} else if( document.all ) {
		target = document.all[targetName];
		targetImg = document.all[targetName + '_img'];
	}

	if( target ) {
	    for (i = 0; i < target.length; i++)
	    {	    
		    if( target[i].style.display == "none" ) {
			    target[i].style.display = "inline";
		    } else {
			    target[i].style.display = "none";
		    }
		}
	}
	window.focus();
} 

function NumberEnsure() {
	var Key = window.event.keyCode; 
	if (Key < 48 || Key > 57) {
		window.event.returnValue = false; 
	}
}

function InsertCode(TextFieldName, StartCode, EndCode) 
{
    var TextField = document.Js_GetElement(TextFieldName);

    TextField.focus();

    var Range = document.selection.createRange( );

    if (Range.text) 
    {
        document.selection.createRange().text = StartCode + Range.text + EndCode;
    } 
    else 
    {  
        TextField.value = TextField.value + StartCode + EndCode;
    }
    
    TextField.focus();
}


// Кэш.
function Js_Global_Cache()
{
    // Признак включения кэша.
    this.IsEnabled = false;

    // Префикс ключа элемента DOM.
    this.ElementKeyPrefix = "Element_";
}

// Добавление значения.
// Аргументы:
// 1. key - ключ.
// 2. value - значение.
Js_Global_Cache.prototype.Add = function(key, value)
{    
    if (this.IsEnabled == false)
    {
        return; 
    }
      
    if (typeof(value) == "undefined")
    {
        key = this.ElementKeyPrefix + key;
        
        value = document.getElementById(key);
    }
      
    this[key] = value;
}

// Удаление значения.
// Аргументы:
// 1. key - ключ.
Js_Global_Cache.prototype.Remove = function(key)
{    
    if (this.IsEnabled == false)
    {
        return; 
    }

    if (this[key] != null)
    { 
        this[key] = null;
    }
}

// Очистка.
Js_Global_Cache.prototype.Clear = function()
{    
    if (this.IsEnabled == false)
    {
        return; 
    }

    for (var key in this)
    {
        this.Remove(key);
    }  
}

// Удаление элемента DOM.
// Аргументы:
// 1. id - идентификатор элемента.
Js_Global_Cache.prototype.RemoveElement = function(id)
{    
    this.Remove(this.ElementKeyPrefix + id);
}

// Получение элемента DOM.
// Аргументы:
// 1. id - идентификатор элемента.
// Результат: кэшированный элемент DOM.
Js_Global_Cache.prototype.GetElement = function(id)
{    
    if (this.IsEnabled == false)
    {
        return null; 
    }
    else
    {  
        return this[this.ElementKeyPrefix + id];
    }
}

// Добавление элемента DOM.
// Аргументы:
// 1. element - элемент.
Js_Global_Cache.prototype.AddElement = function(element)
{    
    return this.Add(this.ElementKeyPrefix + element.id, element);
}

// Получение элемента DOM.
// Аргументы:
// 1. element - элемент DOM или его идентификатор.
// Результат: элемент DOM.
document.Js_GetElement = function(element)
{ 
    if (typeof(element) == "string")
    {        
        element = this.getElementById(element);
    }  
    else if (typeof(element) == "undefined")
    {
        element = null; 
    }
       
     return element;  
}

// Удаление элемента DOM.
// Аргументы:
// 1. element - удаляемый элемент или его идентификатор.
// 2. parent - родительский элемент.
document.Js_RemoveElement = function(element, parent)
{ 
    element = this.Js_GetElement(element);
      
    if (element == null)
    {
        return;  
    }
    
    parent = this.Js_GetElement(parent);
    
    if (parent == null)
    {
        parent = element.parentNode; 
    }

    if (parent == null)
    {
        return;  
    }

    try
    {           
        parent.removeChild(element);                       
    }
    catch (e)
    {
    }       
}

// Удаление дочерних узлов элемента DOM.
// Аргументы:
// 1. element - элемент DOM.
document.Js_RemoveChildren = function(element)
{
    element = this.Js_GetElement(element);
      
    if (element == null || element.hasChildNodes() == false)
    {
        return;  
    }

    if (element.innerHTML)
    {
        element.innerHTML = "";
    }
    else
    { 
	    var count = element.childNodes.length - 1;			
    	
	    if (count <= 0)
	    {
	        return;
	    }
    	
	    for (var i = count; i >= 0; i--)
	    {			
		    this.Js_RemoveElement(element.childNodes[i], element);		
	    }
    }
}

// Копирование потомков одного узла в другой.
// Аргументы:
// 1. from - исходный узел или его идентификатор.
// 2. to - конечный узел или его идентификатор.
document.Js_CopyChildren = function(from, to)
{	
    to = this.Js_GetElement(to);
      
    if (to == null)
    {
        return;  
    }

    from = this.Js_GetElement(from);
      
    if (from == null || from.hasChildNodes() == false)
    {
        return;  
    }

    if (from.innerHTML)
    {
        to.innerHTML = from.innerHTML;
    }
    else
    {    
	    for (var i = 0; i < from.childNodes.length; i++)
	    {				
		    var toChild = null;
		    var fromChild = from.childNodes[i];
    				
		    if (fromChild.nodeValue == null)
		    {			
			    toChild = to.ownerDocument.createElement(fromChild.nodeName);

			    for (var j = 0; j < fromChild.attributes.length; j++)
			    {
				    var att = fromChild.attributes[j];

				    if (att.specified == false || !att.nodeValue || att.nodeValue == "")
				    {
					    continue;
				    }
    				
				    switch (att.nodeName.toLowerCase())
				    {
					    case "class":
					    {
						    toChild.className = att.nodeValue;
					    }
						    break;
					    case "colspan":
					    {
						    toChild.colSpan = att.nodeValue;
					    }
						    break;
					    default:
					    {
						    toChild.setAttribute(att.nodeName, att.nodeValue);				
					    }
						    break;
				    }
			    }
    			
			    toChild.style.cssText = fromChild.style.cssText;
		    }
		    else
		    {
			    toChild = to.ownerDocument.createTextNode(fromChild.nodeValue);
		    }
    			
	        if (toChild == null)
	        {
	            return;
	        }
    	    
		    this.Js_CopyChildren(fromChild, to.appendChild(toChild));		
	    }
    }
}

// Получение HTML-кода, содержащегося внутри элемента DOM.
// Аргументы:
// 1. element - элемент DOM или его идентификатор.
// Результат: HTML-код, содержащийся внутри элемента DOM.
document.Js_GetInnerHtml = function(element)
{
    var result = "";
    
    element = this.Js_GetElement(element);
   
    if (element != null)
    {
        if (element.innerHTML)
        {
            result = element.innerHTML;
        }
        else
        {       
            try
            {                             
                for (var i = 0; i < element.childNodes.length; i++)
                {		
                    var child = element.childNodes[i];

                    if (child.nodeValue == null)
                    {			
                        result += "<" + child.nodeName;

                        for (var j = 0; j < child.attributes.length; j++)
                        {
                            var att = child.attributes[j];                            
                            
                            if (att.specified == true)
                            { 
                                result += " " + att.nodeName;		
                                
                                if (att.nodeValue && att.nodeValue != "")
                                {                                    	                
                                    result += "=\"" + att.nodeValue + "\"";
                                }
                            } 
                        }
            			
                        result += ">";
                        
                        result += this.Js_GetInnerHtml(child);
                        
                        result += "</" + child.nodeName + ">";
                    }
                    else
                    {
                        result += child.nodeValue;
                    }    	            	                
                } 		
            }
            catch (e) 
            {                
            }  
        }
    }
            
    return result;
}     

// Предварительная загрузка изображений с целью их кэширования.
// Аргументы:
// 1. files - массив или строка с именами файлов изображений, разделенных символом ";".
// 2. folder - путь к папке содержащей файлы изображений.
document.Js_PreloadImages = function(files, folder)
{
    if (!this.images)
    {
        return;
    }

    if (typeof(files) == "string" && files != "")
    {
        files = files.split(";"); 
    }
     
    if (!files.length || files.length == 0)
    {
        return; 
    }  

    try
    {                 
        for (var i = 0; i < files.length; i++)
        {
            var filePath = String(files[i]);
        
            if (filePath == "")
            {
                continue; 
            }
                 
            if (typeof(folder) != "undefined")
            {
                filePath = String(folder) + filePath;
            }
                        
            (new Image).src = filePath;           
        }
    }
    catch (e)    
    {
    }  
}    

window.Js_Navigate = function(url,target,params,focus)
{
    if (typeof(url) == "undefined" || url == "")
    {
        return; 
    }
    
    if  (typeof(params) != "undefined")
    {
        var newWindow = this.open(url, target, params);
        if( focus )
          newWindow.focus();
    }
    else
    {     
        try
        {        
	        var element = document.body.appendChild(document.createElement("A"));
                    
            element.setAttribute("href", url);
            
            if (typeof(target) == "string" && target != "")
            {
                element.setAttribute("target", target);
            }
            
            element.click();
        }
        catch (e)
        {  
            if (typeof(target) == "string" && target != "")
            {
                this.open(url, target);
            }
            else
            {
                this.location = url;
            }     
        }           
    }
}

// Подтверждение выполнения действия.
// 1. message - сообщение, показываемое в окне подтверждения.
// Результат: Результат подтверждения.
window.Js_Confirm = function(message)
{    
    var result = true;
    
    if (message == undefined || message == "")
    { 
        message = "Вы уверены, что хотите это сделать?"; 
    }
    
    try
    {
        result = this.confirm(message);
    }
    catch (e)
    {
    }
    
    return result; 
}

var eventKey;

function registerSubmitHandlers() 
{
    if ( typeof(autoSubmitNames)!="undefined" ) {
      for( i = 0; i<autoSubmitNames.length; i++ ) {
        var ob = document.getElementById(autoSubmitNames[i]);
        if ( ob!=null )
          ob.onkeydown = doSubmit;
      }
      if ( !document.all ) {
        eventKey = "e.keyCode";
        document.captureEvents(Event.KeyDown);
      }
      else
        eventKey = "event.keyCode";
    }
}

function doLinkSubmit(linkID) 
{
    if ( document.all )
      document.getElementById(linkID).click();
    else
      document.location.href = document.getElementById(linkID).href;
}

function doSubmit(e) 
{
    if ( eval(eventKey)==13 ) {
      for( i=0; i<autoSubmitNames.length; i++ ) {
        if ( autoSubmitNames[i]==this.id ) {
          eval(autoSubmit[i]);
          return false;
        }
      }
    }
}

// Список ссылок на объекты текстового редактора.
var Js_Local_Controls_TextEditor_TextEditors = [];

// Список ссылок на объекты текстовых полей.
var Js_Local_Controls_TextEditor_TextBoxes = [];

// Текстовый редактор. Позволяет форматировать текст, выделенный в текстовом поле.
// Аргументы:
// 1. textBoxID - идентификатор текстового поля, используемого для размещения редактируемого текста.
// 2. tags - коллекция тэгов, представляющий из себя ассоциативный массив, ключом которого является 
//      имя тэга, а значением - массив из строковых значений открывающего и закрывающего тэгов.
function Js_Local_Controls_TextEditor(textBoxID, tags) 
{        
    // Идентификатор текстового поля, используемого для размещения редактируемого текста.
    this.TextBoxID = textBoxID;       
    // Коллекция тэгов, представляющий из себя ассоциативный массив, ключом которого является 
    // имя тэга, а значением - массив из строковых значений открывающего и закрывающего тэгов.
    this.Tags = tags;        
    // Текстовое поле, используемое для размещения редактируемого текста.
    this.TextBox = null;   
    // Область выделенного текста (используется в IE и Opera). 
    this.SelectedTextRange = null;    
    // Стартовая позиция выделенного текста (используется в Mozilla). 
    this.SelectionStart = -1;
    // Конечная позиция выделенного текста (используется в Mozilla).  
    this.SelectionEnd = -1;         
}

// Освобождение захваченных ресурсов.
Js_Local_Controls_TextEditor.prototype.Dispose = function() 
{
    for (var i = 0; i < Js_Local_Controls_TextEditor_TextEditors.length; i++)
    {
        if (Js_Local_Controls_TextEditor_TextEditors[i] == this)
        {
            Js_Local_Controls_TextEditor_TextEditors[i] = null;
            Js_Local_Controls_TextEditor_TextBoxes[i] = null;
        }
    }
          
    this.TextBox = null;
}

// Инициализация.
Js_Local_Controls_TextEditor.prototype.Initialize = function() 
{
    if (this.TextBox == null)
    {
        this.TextBox = document.Js_GetElement(this.TextBoxID);
    }  
   
    if (this.TextBox == null)
    {
        return;         
    }   
    
    this.TextBox.onchange = this.SaveSelection;
    this.TextBox.onclick = this.SaveSelection;
    this.TextBox.onkeyup = this.SaveSelection;
    this.TextBox.onfocus =this.SaveSelection;
    
    if (!document.selection) 
    { 
        this.TextBox.onSelect = this.SaveSelection;
    }
   
    Js_Local_Controls_TextEditor_TextEditors.push(this);     
    Js_Local_Controls_TextEditor_TextBoxes.push(this.TextBox);      
}

// Сохранение параметров выделения.
Js_Local_Controls_TextEditor.prototype.SaveSelection = function() 
{
    var textEditors = [];
    
    for (var i = 0; i < Js_Local_Controls_TextEditor_TextBoxes.length; i++)
    {
         if (this == Js_Local_Controls_TextEditor_TextBoxes[i])
         {
             textEditors.push(Js_Local_Controls_TextEditor_TextEditors[i]);
         }  
    }
    
    if (textEditors.length == 0)
    {
        return; 
    }
      
    for (var i = 0; i < textEditors.length; i++)
    {  
        var textEditor = textEditors[i];
        
        if (document.selection) 
        {
            textEditor.SelectedTextRange = document.selection.createRange().duplicate();               
        } 
        else if (typeof(this.selectionStart) != "udefined") 
        {    
            textEditor.SelectionStart = this.selectionStart;
            textEditor.SelectionEnd = this.selectionEnd;        
        } 
        else 
        {   
            textEditor.SelectionStart = -1;
            textEditor.SelectionEnd = -1;
        }
    } 
}

// Получение значения выделенного фрагмента текста.
// Результат:
// Значение выделенного фрагмента текста.
Js_Local_Controls_TextEditor.prototype.GetSelectedText = function() 
{        
    var result = "";
    
    if (this.SelectedTextRange != null)
    {
         result = this.SelectedTextRange.text;
    }  
    else if (this.SelectionStart >= 0 && this.SelectionEnd > this.SelectionStart)
    {
        result = this.TextBox.value.substring(this.SelectionStart, this.SelectionEnd);
    }  
    
   return result;    
}

// Установка нового значения выделенного фрагмента текста.
// Аргументы:
// 1. value - новое значение.
Js_Local_Controls_TextEditor.prototype.SetSelectedText = function(value) 
{
    if (this.TextBox == null)
    {
        return;         
    }   

    if (this.SelectedTextRange != null) 
    {
        this.SelectedTextRange.text =  value;
        
        this.SelectedTextRange.select();
    } 
    else if (this.SelectionStart >= 0 && this.SelectionEnd >= this.SelectionStart) 
    {
        var left = this.TextBox.value.substring(0, this.SelectionStart);
        
        this.TextBox.value = left + value + this.TextBox.value.substr(this.SelectionEnd);
        
        this.TextBox.selectionStart = left.length + value.length;
        this.TextBox.selectionEnd = this.TextBox.selectionStart;
    } 
    else 
    {
        this.TextBox.value += value;
    }          
}

// Форматирование выделенного фрагмента текста.
// Аргументы:
// 1. args - ассоциативный массив параметров форматирования.
// Список имен параметров:
// 1. "Text" - текст, на который заменяется выделенный фрагмент. Если он не указан, текст выделенного
//     фрагмента остается неизменным и форматируется исходя из значений остальных параметров.
// 2. "Prefix" - префикс, результата форматирования.
// 3. "Suffix" - суффикс, результата форматирования.
Js_Local_Controls_TextEditor.prototype.FormatSelectedText = function(parameters) 
{
    if (this.TextBox == null)
    {
        return;         
    }   
           
    var selectedText = this.GetSelectedText();
    
    if (parameters["Text"] != null)
    {
        selectedText = parameters["Text"];
    }
    
    if (parameters["Prefix"] != null)
    {
        selectedText = parameters["Prefix"] + selectedText;
    }

    if (parameters["Suffix"] != null)
    {
        selectedText +=  parameters["Suffix"];
    }

    this.SetSelectedText(selectedText);
   
    this.TextBox.focus();  
}

// Вставка тэга.
// Аргументы:
// 1. tagName - имя тэга.
Js_Local_Controls_TextEditor.prototype.InsertTag = function(tagName) 
{
    if (this.Tags[tagName] == null)
    {
        return; 
    }  
      
    var parameters = {};
   
    var tag = this.Tags[tagName];

    if (tag.length == 1)
    { 
        parameters["Text"] = tag[0];  
    }
    else if (tag.length > 0)
    {
        parameters["Prefix"] = tag[0]; 
        
        if (tag.length > 1)
        {
            parameters["Suffix"] = tag[1];
        }           
    }
       
    this.FormatSelectedText(parameters);
}

// Представление данных в виде дерева. Позволяет показывать иерархическую структуру данных 
// в виде дерева, узлы которого можно открывать и закрывать. Данные могут быть загружены 
// полностью, либо подгружаться по требованию.
function Js_Local_Controls_TreeView()
{
    // Признак загрузки данных с сервера. Должен быть истинным с начала загрузки до ее завершения.
    // По окончании загрузки он должен быть обязательно ложным, так как в случае его истинности
    // данные загружаться не будут. Этот признак нужен для того, чтобы обеспечить непрерывность 
    // загрузки данных для конкретного узла. 
    this.IsDataLoading = false;

    // Коллекция параметров.  
    this.Parameters = new Object();   
   
    // Коллекция значений открытых узлов. 
    this.Parameters.OpenedNodesValues = {};
    
    // Коллекция значений узлов с заполненными дочерними узлами. 
    this.Parameters.PopulatedChildrenNodesValues = {};
    
    // Коллекция свойств.  
    this.Properties = new Object();   
   
    // URL источника данных. 
    this.Properties.SourceUrl = "";
   
    // Идентификатор элемента управления дерева. 
    this.Properties.ControlID = "";
    
    // Имена параметров запроса.  
    this.Properties.RequestNames = new Object(); 
    
    // Параметр запроса со значением корневого узла. 
    this.Properties.RequestNames.RootNodeValue = "";
    
    // Параметр запроса с признаком осуществления заполнения узла.  
    this.Properties.RequestNames.IsPopulateNode = ""; 

    // Параметр запроса с идентификатором элемента управления дерева.  
    this.Properties.RequestNames.ControlID = ""; 
     
    // Предупреждение о протекающей в данный момент загрузке данных с сервера. 
    this.Warning = new Object();
    
    // Идентификатор узла предупреждения. 
    this.Warning.Id = "";
    
    // Текст предупреждения.  
    this.Warning.Text = "";
     
    // Имя тэга узла предупреждения. 
    this.Warning.TagName = "";
    
    // CSS-класс тэга узла предупреждения.  
    this.Warning.CssClass = "";
    
    // Префиксы идентификаторов.
    this.IdPrefixes = new Object();
   
    // Префикс идентификатора списка потомков. 
    this.IdPrefixes.Children = "";  
   
    // Префикс идентификаторов переключателей. 
    this.IdPrefixes.Switchers = new Object();
    
    // Префикс идентификатора выключателя. 
    this.IdPrefixes.Switchers.Off = new Object();  

    // Префикс идентификатора кнопки выключателя. 
    this.IdPrefixes.Switchers.Off.Button = "";  
   
    // Префикс идентификатора картинки выключателя.  
    this.IdPrefixes.Switchers.Off.Image = "";  
   
    // Префиксы идентификаторов включателя. 
    this.IdPrefixes.Switchers.On = new Object();
          
    // Префикс идентификатора идентификатора кнопки включателя. 
    this.IdPrefixes.Switchers.On.Button = "";  
   
    // Префикс идентификатора картинки включателя.   
    this.IdPrefixes.Switchers.On.Image = ""; 
   
    // Идентификаторы. 
    this.Ids = new Object();        
   
    // Идентификатор загрузчика данных с сервера. 
    this.Ids.DataLoader = "";  
   
    // Идентификатор корневого узла дерева. 
    this.Ids.RootNode = "";
}

// Инициализация.
// Аргументы:
// 1. isDataLoading - признак загрузки данных с сервера. Должен быть истинным в случае инициализации 
//     дерева с подгрузкой данных по требованию при условии, что часть данных должна быть подгружена 
//     при инициализации. 
Js_Local_Controls_TreeView.prototype.Initialize = function(isDataLoading)
{
    for (key in this.Parameters.OpenedNodesValues)
    {    
        if (this.Parameters.OpenedNodesValues[key] == false)
        {
            continue;
        }

        if (this.Parameters.PopulatedChildrenNodesValues[key] == true)
        {
            this.Parameters.OpenedNodesValues[key] = false;
            
            continue; 
        }
 
        this.UpdateState(key, isDataLoading, true);                                   
                
        if (isDataLoading == true)
        {
            break;   
        } 
    }
}

// Обновление состояния узла (ветви) дерева.
// Аргументы:
// 1. value - значение узла дерева.
// 2. isDataLoading - признак загрузки данных с сервера.
// 3. isInit - признак осуществления инициализации дерева.
Js_Local_Controls_TreeView.prototype.UpdateState = function(value, isDataLoading, isInit)
{
    var isChildrenPopulated = false;
   
    if  (this.Parameters.PopulatedChildrenNodesValues[value] == true)
    { 
        isChildrenPopulated = true;
    }  
    
    if (isChildrenPopulated == false && isDataLoading == true && this.IsDataLoading == true)
    {
        return; 
    }
        
	try
	{	  			
		this.UpdateChildrenState(value, isDataLoading, isInit);				
		this.UpdateSwitcherState(value, isInit);		
	
        if (isDataLoading == true && isChildrenPopulated == false)
        {  
            this.BeginLoadData(value);
        } 
	}
	catch (e)
	{	
		alert(e.description);    
	}	
}

// Обновление состояния потомков (листьев) узла (ветви) дерева.
// Аргументы:
// 1. value - значение узла дерева.
// 2. isDataLoading - признак загрузки данных с сервера.
// 3. isInit - признак осуществления инициализации дерева.
Js_Local_Controls_TreeView.prototype.UpdateChildrenState = function(value, isDataLoading, isInit)
{ 
	var node = document.Js_GetElement(this.IdPrefixes.Children + value);
        
    if (isInit == true)
    {    
        node.style.display = "none"; 
    }  
        
	if (node.style.display == "none")
	{		
		node.style.display = "";				
		
		if (isDataLoading == true && this.Parameters.PopulatedChildrenNodesValues[value] != true)
		{		
			this.ShowWarning(node);
		}
	}
	else
	{	
		node.style.display = "none";
	}	
}

// Показ предупреждения о протекающей в данный момент загрузке данных с сервера.
// Аргументы:
// 1. node - узел, для которого загружаются данные с сервера.
Js_Local_Controls_TreeView.prototype.ShowWarning = function(node)
{
	var parentNode = node.parentNode;
	
	if (parentNode == null)
	{
		return;
	}
	
	var node = parentNode.appendChild(document.createElement(this.Warning.TagName));
	
	node.id = this.Warning.Id;
	node.className = this.Warning.CssClass;

	node.appendChild(document.createTextNode(this.Warning.Text));	
}

// Обновление состояния переключателя состояния узла.
// Аргументы:
// 1. value - значение узла дерева.
// 2. isInit - признак осуществления инициализации дерева.
Js_Local_Controls_TreeView.prototype.UpdateSwitcherState = function(value, isInit)
{
	var onButton = document.Js_GetElement(this.IdPrefixes.Switchers.On.Button + value);	    		
	var offButton = document.Js_GetElement(this.IdPrefixes.Switchers.Off.Button + value);
	
	var onImage = document.Js_GetElement(this.IdPrefixes.Switchers.On.Image + value);	    		
	var offImage = document.Js_GetElement(this.IdPrefixes.Switchers.Off.Image + value);

    if (isInit == true)
    {
        onButton.style.display = ""; 
    }  
	
	if (onButton.style.display == "none")
	{
		onButton.style.display = "";
		offButton.style.display = "none";

        if (onImage != null)
        {
		    onImage.style.display = "";
		}
		
		if (offImage != null)
		{
		    offImage.style.display = "none";
		}
	}
	else
	{
		onButton.style.display = "none";
		offButton.style.display = "";

        if (onImage != null)
        {
		    onImage.style.display = "none";
		}
		
		if (offImage != null)
		{
		    offImage.style.display = "";
		}
	}
}

// Начало загрузки с сервера данных для узла дерева.
// Аргументы:
// 1. value - значение узла дерева, для которого осуществляется загрузка.
Js_Local_Controls_TreeView.prototype.BeginLoadData = function(value)
{
    this.IsDataLoading = true;

	var node = document.Js_GetElement(this.Ids.DataLoader);

	node.src = 
	    this.Properties.SourceUrl +
		"?" + this.Properties.RequestNameRootNodeValue + 
		"=" + value +
		"&" + this.Properties.RequestNameIsPopulateNode + 
		"=1" + 
		"&" + this.Properties.RequestNameControlID + 
		"=" + this.Properties.ControlID +
		"&" + (new Date()).valueOf();	
		
	this.Parameters.PopulatedChildrenNodesValues[value] = true;	
}

// Окончание загрузки с сервера данных для узла дерева.
// Аргументы:
// 1. value - значение узла, для которого загружаются данные.
Js_Local_Controls_TreeView.prototype.EndLoadData = function(value)
{
    this.IsDataLoading = false;
	
	try
	{		
	    document.Js_RemoveElement(this.Warning.Id);			
		
		var node = parent.document.Js_GetElement(this.IdPrefixes.Children + value);													
						
		this.CopyChildNodes(document.Js_GetElement(this.Ids.RootNode), node);	
		
		node = parent.document.Js_GetElement(this.Ids.DataLoader);
	
		node.src = "";	
		
		parent.document.clear();
	}
	catch (e)
	{
		alert(e.description);
	}
}

// Копирование потомков одного узла в другой.
// Аргументы:
// 1. from - исходный узел.
// 2. to - конечный узел.
Js_Local_Controls_TreeView.prototype.CopyChildNodes = function(from, to)
{	
	if (from.hasChildNodes() == false)
	{
		return;
	}
    
	for (var i = 0; i < from.childNodes.length; i++)
	{				
		var toChild = null;
		var fromChild = from.childNodes[i];
				
		if (fromChild.nodeValue == null)
		{			
			toChild = to.ownerDocument.createElement(fromChild.nodeName);

			for (var j = 0; j < fromChild.attributes.length; j++)
			{
				var att = fromChild.attributes[j];

				if (att.specified == false || att.nodeValue == null || att.nodeValue == "" || att.nodeValue == undefined)
				{
					continue;
				}
				
				switch (att.nodeName.toLowerCase())
				{
					case "class":
					{
						toChild.className = att.nodeValue;
					}
						break;
					case "colspan":
					{
						toChild.colSpan = att.nodeValue;
					}
						break;
					default:
					{
						toChild.setAttribute(att.nodeName, att.nodeValue);				
					}
						break;
				}
			}
			
			toChild.style.cssText = fromChild.style.cssText;
		}
		else
		{
			toChild = to.ownerDocument.createTextNode(fromChild.nodeValue);
		}
			
	    if (toChild == null)
	    {
	        return;
	    }
	    
		this.CopyChildNodes(fromChild, to.appendChild(toChild));
	}
}

// Новинки товаров. Показываются в виде списка названий товаров и изображения товара. При наведении
// курсора на название какого-либо товара, показывается его изображение. В противном случае изображения
// товаров из списка чередуются. Название товара представляет из себя ссылку на страницу с информацией 
// об этом товаре. Для чередования изображений используется таймер.
// Аргументы:
// 1. name - имя объекта.
// 2. imageControlID - идентификатор элемента управления для показа картинок (тэг "IMG").
// 3. linkControlID - идентификатор элемента управления ссылки на товар (тэг "A"), картинка 
//     которого показывается в текущий момент времени.
// 4. productsIDs - массив идентификаторов товаров.
// 5. imagesFolder - путь к папке с изображениями товаров.
function Js_Local_Modules_Products_Favorites_Lists_Novelties(
    name, 
    imageControlID, 
    linkControlID, 
    productsIDs,     
    imagesFolder
    )
{    
    this.Name = name;
    
    this.ImageControl = document.Js_GetElement(imageControlID);
   
    this.LinkControl = document.Js_GetElement(linkControlID);  
   
    this.ProductsIDs  = productsIDs;
   
    this.ProductsLinks  = [];
    
    this.Images = {}; 
    
    for (var i = 0; i < this.ProductsIDs.length; i++)
    { 
        this.Images[productsIDs[i]] =  imagesFolder + "/" + this.ProductsIDs[i] + "/9.jpg";
                
        this.ProductsLinks[i] = document.Js_GetElement(this.Name + this.ProductsIDs[i]);
        
        this.ProductsLinks[i].NoveltyIndex = i;        
    } 
   
    this.Index = -1;
    
    this.Tick(); 
    
    this.ImageControl.style.display = "";
    
    this.IntervalValue = 1000;
   
    this.Interval = window.setInterval(this.Name + ".Tick()", this.IntervalValue);  
}

// Обработчик события, возникающего при срабатывании таймера.
Js_Local_Modules_Products_Favorites_Lists_Novelties.prototype.Tick = function()
{ 
    if (this.Index >= 0)
    { 
        this.ProductsLinks[this.Index].className = "";        
    }
    
    this.Index++;
    
    if (this.Index == this.ProductsIDs.length)
    {
         this.Index = 0;
    }  

    this.ImageControl.src = this.Images[this.ProductsIDs[this.Index]];     

    this.LinkControl.href = this.ProductsLinks[this.Index].href;       
   
    this.ProductsLinks[this.Index].className = "Css_Link_Hover";       
 }

// Обработчик события, возникающего при наведении курсора на картинку товара.
Js_Local_Modules_Products_Favorites_Lists_Novelties.prototype.Js_Image_MouseOver = function()
{
    window.clearInterval(this.Interval);
}

// Обработчик события, возникающего при уходе курсора с картинки товара.
Js_Local_Modules_Products_Favorites_Lists_Novelties.prototype.Js_Image_MouseOut = function()
{
    this.Interval = window.setInterval(this.Name + ".Tick()", this.IntervalValue);  
}

// Обработчик события, возникающего при наведении курсора на название товара.
// Аргументы:
// 1. item - элемент управления названия товара (тэг "A").
Js_Local_Modules_Products_Favorites_Lists_Novelties.prototype.Js_Name_MouseOver = function(item)
{
    if (item.NoveltyIndex != this.Index)
    {
        this.ProductsLinks[this.Index].className = ""; 
        
        this.Index = item.NoveltyIndex;
    }      
        
    window.clearInterval(this.Interval);

    this.ImageControl.src = this.Images[this.ProductsIDs[this.Index]];
}

// Обработчик события, возникающего при уходе курсора с названия товара.
Js_Local_Modules_Products_Favorites_Lists_Novelties.prototype.Js_Name_MouseOut = function()
{
    this.ProductsLinks[this.Index].className = "Css_Link_Hover"; 
    
    this.Interval = window.setInterval(this.Name + ".Tick()", this.IntervalValue);  
}

var addHandler = function( instance, eventName, handler )
{
  if (instance.addEventListener)
    return instance.addEventListener(eventName, handler, false);
  if (this.attachEvent)
    return instance.attachEvent('on' + eventName, handler);
  return false;
}

var removeHandler = function(instance, eventName, handler)
{
  if (instance.removeEventListener)
    return instance.removeEventListener(eventName, handler, false);
  else if (instance.detachEvent)
    return instance.detachEvent('on' + eventName, handler);
  return false;
}


function getEvent(event)
{
  if (!event)
    event = window.event;
  return event;
}

function stopEvent(event)
{
  event = getEvent(event);
  if (event)
  {
    event.cancelBubble = true;
    if (event.stopPropagation)
      event.stopPropagation();
    if (event.returnValue)
      event.returnValue = false;
  }
  return false;
}

function getEventSource( event )
{
  event = getEvent( event );
  if( event )
  {
    if( event.target )
      return event.target;
    if( event.srcElement )
      return event.srcElement;
  }    
  return null;
}

function getEventKey(event)
{
  event = getEvent(event);
  if (event)
  {
    if (event.keyCode)
      return event.keyCode;
    if (event.charCode)
      return event.charCode;
  }
  return null;
}

function isEventKey(event, key)
{
  return getEventKey(event) == key;
}

function isEventKeyEscape( event )
{
  return isEventKey( event, 27 );
}

function isEventKeyEnter(event)
{
  return isEventKey(event, 13);
}

function isEventEditKeys( event )
{
  var key = getEventKey( event );
  if( key )
  {
    switch( key )
    {
      case 8/*Backspace*/:
      case 33/*PgUp*/:
      case 34/*PgDn*/:
      case 35/*End*/:
      case 36/*Home*/:
      case 37/*Lf*/:
      case 38/*Up*/:
      case 39/*Rg*/:
      case 40/*Dn*/:
      case 46/*Del*/:
        return true;
    }
  }
  return false;
}


function getParentByTagName(element, tagName)
{
  if (element)
  {
    var lowerTagName = tagName.toLowerCase();
    var current = element.parentNode;
    while (current)
    {
      if (current.tagName)
        if (current.tagName.toLowerCase)
        if (current.tagName.toLowerCase() == lowerTagName)
        return current;
      current = current.parentNode;
    }
  }
  return null;
}

function getFirstChildByTagName( element, tagName ) 
{
  if( element )
  {
    var lowerTagName = tagName.toLowerCase();
    var current = element.firstChild;
    while( current )
    {
      if( current.tagName )
        if( current.tagName.toLowerCase )
          if( current.tagName.toLowerCase() == lowerTagName )
            return current;
      current = current.nextSibling;
    }  
  }
  return null;
}

function getLastChildByTagName( element, tagName ) 
{
  if( element )
  {
    var lowerTagName = tagName.toLowerCase();
    var current = element.lastChild;
    while( current )
    {
      if( current.tagName )
        if( current.tagName.toLowerCase )
          if( current.tagName.toLowerCase() == lowerTagName )
            return current;
      current = current.previousSibling;
    }  
  }
  return null;
}

function getFirstSiblingByTagName( element, tagName ) 
{
  if( element )
  {
    var lowerTagName = tagName.toLowerCase();
    var current = element.nextSibling;
    while( current )
    {
      if( current.tagName )
        if( current.tagName.toLowerCase )
          if( current.tagName.toLowerCase() == lowerTagName )
            return current;
      current = current.nextSibling;
    }  
  }
  return null;
}

function setVisible(control, visible)
{
  if (control)
    control.style.display = visible ? '' : 'none';
  return visible;
}

function getVisible(control)
{
  if(control)
    return control.style.display != 'none';
  return false;
}

function toggleVisible( control )
{
  return setVisible( control, !getVisible( control ) );
}

function setInnerHTML( innerHTML, controlID )
{
  control = document.getElementById( controlID );
  if( control )
    control.innerHTML = innerHTML;
}

function getBounds(control)
{
  var bounds = new Object();
  bounds.x = 0;
  bounds.y = 0;
  bounds.height = 0;
  bounds.width = 0;
  if (control)
  {
    if (typeof (control.offsetParent) != 'undefined' && control.offsetParent)
    {
      bounds.x = control.offsetLeft;
      bounds.y = control.offsetTop;
      var parent = control.offsetParent;
      while (parent)
      {
        bounds.x += parent.offsetLeft;
        bounds.y += parent.offsetTop;
        var parentTagName = parent.tagName.toLowerCase();
        if (parentTagName != 'table' && parentTagName != 'body' && parentTagName != 'html' && parentTagName != 'div' && parent.clientTop && parent.clientLeft)
        {
          bounds.x += parent.clientLeft;
          bounds.y += parent.clientTop;
        }
        parent = parent.offsetParent;
      }
    }
    else if (typeof (control.left) != 'undefined')
    {
      bounds.x = control.left;
      bounds.y = control.top;
    }
    else if (typeof (control.x) != 'undefined')
    {
      bounds.x = control.x;
      bounds.y = control.y;
    }
    if (typeof (control.offsetHeight) != 'undefined')
    {
      bounds.height = control.offsetHeight;
      bounds.width = control.offsetWidth;
    }
    else if (control.style && typeof (control.style.pixelHeight) != 'undefined')
    {
      bounds.height = control.style.pixelHeight;
      bounds.width = control.style.pixelWidth;
    }
  }
  return bounds;
}

function getWindowSize()
{
  var size = new Object();
  size.height = 0;
  size.width = 0;
  if (typeof (window.innerHeight) != "undefined")
  {
    size.height = window.innerHeight;
    size.width = window.innerWidth;
  }
  else if (typeof (document.documentElement) != "undefined" && document.documentElement && typeof (document.documentElement.clientHeight) != "undefined")
  {
    size.height = document.documentElement.clientHeight;
    size.width = document.documentElement.clientWidth;
  }
  else if (typeof (document.body) != "undefined" && document.body && typeof (document.body.clientHeight) != "undefined")
  {
    size.height = document.body.clientHeight;
    size.width = document.body.clientWidth;
  }
  return size;
}

function getScrollPosition()
{
  var position = new Object();
  position.x = 0;
  position.y = 0;
  if (typeof (window.pageXOffset) != "undefined")
  {
    position.x = window.pageXOffset;
    position.y = window.pageYOffset;
  }
  else if (typeof (document.documentElement) != "undefined" && document.documentElement && typeof (document.documentElement.scrollLeft) != "undefined")
  {
    position.x = document.documentElement.scrollLeft;
    position.y = document.documentElement.scrollTop;
  }
  else if (typeof (document.body) != "undefined" && document.body && typeof (document.body.scrollLeft) != "undefined")
  {
    position.x = document.body.scrollLeft;
    position.y = document.body.scrollTop;
  }
  return position;
}

function getDisplayBounds()
{
  var size = getWindowSize();
  var position = getScrollPosition();
  var bounds = new Object();
  bounds.x = position.x;
  bounds.y = position.y;
  bounds.height = size.height;
  bounds.width = size.width;
  return bounds;
}


function concatCss( csss, css )
{
  if( !csss )
    csss = '';
  if( css )
  {
    if( csss )
      csss += ' ';
    csss += css;
  }
  return csss;
}  


function getArgument(key, value)
{
  return key.toString() + '=' + encodeURIComponent(value.toString());
}

function appendArgument(args, key, value)
{
  var arg = getArgument(key, value);
  if (args && args.length)
    return args + '&' + arg;
  return arg;
}

function packArguments( /*arguments*/ )
{
  var args = null;
  if( arguments && arguments.length )
  {
    for( var i = 0; i < arguments.length - 1; )
    {
      var key = arguments[i++];
      var value = arguments[i++];
      args = appendArgument( args, key, value );
    }
  }
  return args;
}


Function.nothing = function()
{
}

Function.createDelegate = function(instance, method)
{
  return function()
  {
    return method.apply(instance, arguments);
  }
}


String.prototype.endsWith = function(suffix)
{
  return this.substr(this.length - suffix.length) == suffix;
}

String.prototype.startsWith = function( prefix ) 
{
  return this.substr( 0, prefix.length ) == prefix;
}

String.prototype.trimStart = String.prototype.trimLeft = function() 
{
  return this.replace( /^\s+/, '' );
}

String.prototype.trimEnd = String.prototype.trimRight = function() 
{
  return this.replace( /\s+$/, '' );
}

String.prototype.trim = function()
{
  return this.replace(/^\s+|\s+$/g, '');
}

String.prototype.compactWhitespaces = function() 
{
  return this.replace( /\s{2,}/g, ' ' );
}

String.prototype.padLeft = function( totalWidth, paddingChar ) 
{
  var result = this;
  while( result.length < totalWidth )
    result = paddingChar + result;
  return result;
}

String.prototype.padRight = function( totalWidth, paddingChar ) 
{
  var result = this;
  while( result.length < totalWidth )
    result += paddingChar;
  return result;
}

String.prototype.replaceAll = function( oldValue, newValue ) 
{
  return this.replace( new RegExp( oldValue.toString(), "g" ), newValue.toString() );
}

String.prototype.correctRegExpSymbols = function() 
{
  return this.replace( /([\$\(\)\*\+\.\[\]\?\\\/\^\{\}\|])/g, '\\$1' );
}

String.prototype.cry = function() 
{
  var s = '';
  for( var i = 0; i < this.length; i++ )
  {
    var b = this.charCodeAt( i ).toString( 16 );
    s += b.length;
    s += b;
  }
  return s;
}


function dateToIso( date )
{
  if( !date )
    date = new Date();
  return date.getUTCFullYear().toString().padLeft( 4, '0' )
         + '-' + ( date.getUTCMonth() + 1 ).toString().padLeft( 2, '0' ) 
         + '-' + date.getUTCDate().toString().padLeft( 2, '0' )
         + 'T' + date.getUTCHours().toString().padLeft( 2, '0' )
         + ':' + date.getUTCMinutes().toString().padLeft( 2, '0' )
         + ':' + date.getUTCSeconds().toString().padLeft( 2, '0' )
         + '.' + date.getUTCMilliseconds().toString().padLeft( 3, '0' );
}

Date.prototype.toString = function()
{
  return dateToIso( this );
}


function containsInClassName( element, className ) 
{
  var currentClassName = ' ' + element.className.trim() + ' ';
  className = className.trim();
  return currentClassName.indexOf( ' ' + className + ' ' ) >= 0;
}

function appendToClassName( element, className ) 
{
  var currentClassName = ' ' + element.className.trim() + ' ';
  className = className.trim();
  var index = currentClassName.indexOf( ' ' + className + ' ' );
  if( index === -1 )
    element.className = element.className === '' ? className : element.className + ' ' + className;
}

function removeFromClassName( element, className ) 
{
  var currentClassName = ' ' + element.className.trim() + ' ';
  className = className.trim();
  var index = currentClassName.indexOf( ' ' + className + ' ' );
  if( index >= 0 )
    element.className = ( currentClassName.substring( 0, index ) + ' ' +  currentClassName.substring( index + className.length + 1, currentClassName.length ) ).trim();
}

function adjustClassName( element, append, className ) 
{
  if( append )
    appendToClassName( element, className );
  else
    removeFromClassName( element, className ); 
}

if (!window.XMLHttpRequest)
{
  window.XMLHttpRequest = function()
  {
    var progIDs = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];
    for (var i = 0; i < progIDs.length; i++)
    {
      try
      {
        return new ActiveXObject(progIDs[i]);
      }
      catch (e)
      {
      }
    }
    return null;
  }
}

function daemon( url, args )
{
  var request = new XMLHttpRequest();
  request.open( 'POST', url, true );
  request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
  request.send( args );
}

function call(url, args, timeout, oncomplete, onerror, ontimeout)
{

  var _call = new Object();

  _call._onReadyStateChange = function()
  {
    if (this._request.readyState == 4)
    {
      try
      {
        this._clearTimer();
        this._request.onreadystatechange = Function.nothing;
        if (this._request.status == 200)
        {
          if (this._oncomplete != null)
            this._oncomplete(this);
        }
        else
        {
          if (this._onerror != null)
            this._onerror(this);
        }
      }
      catch (e)
      {
        alert( e.message );
      }
      finally
      {
        this._cleanup();
      }
    }
  }

  _call._onTimeout = function()
  {
    try
    {
      this._clearTimer();
      this._request.onreadystatechange = Function.nothing;
      this._request.abort();
      if (this._ontimeout != null)
        this._ontimeout(this);
    }
    catch (e)
    {
        alert( e.message );
    }
    finally
    {
      this._cleanup();
    }
  }

  _call._clearTimer = function()
  {
    if (this._timer)
    {
      window.clearTimeout(this._timer);
      this._timer = null;
    }
  }

  _call._cleanup = function()
  {
    this._clearTimer();
    this._oncomplete = null;
    this._onerror = null;
    this._ontimeout = null;
    this._request = null;
    this._this = null;
  }

  try
  {
    _call._this = _call;
    _call._oncomplete = oncomplete;
    _call._onerror = onerror;
    _call._ontimeout = ontimeout;
    _call._request = new XMLHttpRequest();
    _call._request.onreadystatechange = Function.createDelegate(_call, _call._onReadyStateChange);
    _call._request.open('POST', url, true);
    _call._request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    if (timeout > 0)
      _call._timer = window.setTimeout(Function.createDelegate(_call, _call._onTimeout), timeout);
    _call._request.send(args);
  }
  catch (e)
  {
    _call._cleanup();
    _call = null;
    alert( e.message );
  }

  return _call;

}


function isCookieEnabled()
{
  try
  {
    return navigator.cookieEnabled;
  }
  catch (e)
  {
  }
  return false;
}

/*SWFObject {*/
if(typeof deconcept == "undefined") { var deconcept = new Object(); } if(typeof deconcept.util == "undefined") { deconcept.util = new Object(); } if(typeof deconcept.SWFObjectUtil == "undefined") { deconcept.SWFObjectUtil = new Object(); } deconcept.SWFObject = function(_1, id, w, h, _5, c, _7, _8, _9, _a) { if(!document.getElementById) { return; } this.DETECT_KEY = _a ? _a : "detectflash"; this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); this.params = new Object(); this.variables = new Object(); this.attributes = new Array(); if(_1) { this.setAttribute("swf", _1); } if(id) { this.setAttribute("id", id); } if(w) { this.setAttribute("width", w); } if(h) { this.setAttribute("height", h); } if(_5) { this.setAttribute("version", new deconcept.PlayerVersion(_5.toString().split("."))); } this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); if(!window.opera && document.all && this.installedVer.major > 7) { deconcept.SWFObject.doPrepUnload = true; } if(c) { this.addParam("bgcolor", c); } var q = _7 ? _7 : "high"; this.addParam("quality", q); this.setAttribute("useExpressInstall", false); this.setAttribute("doExpressInstall", false); var _c = (_8) ? _8 : window.location; this.setAttribute("xiRedirectUrl", _c); this.setAttribute("redirectUrl", ""); if(_9) { this.setAttribute("redirectUrl", _9); } }; deconcept.SWFObject.prototype = { useExpressInstall: function(_d) { this.xiSWFPath = !_d ? "expressinstall.swf" : _d; this.setAttribute("useExpressInstall", true); }, setAttribute: function(_e, _f) { this.attributes[_e] = _f; }, getAttribute: function(_10) { return this.attributes[_10]; }, addParam: function(_11, _12) { this.params[_11] = _12; }, getParams: function() { return this.params; }, addVariable: function(_13, _14) { this.variables[_13] = _14; }, getVariable: function(_15) { return this.variables[_15]; }, getVariables: function() { return this.variables; }, getVariablePairs: function() { var _16 = new Array(); var key; var _18 = this.getVariables(); for(key in _18) { _16[_16.length] = key + "=" + _18[key]; } return _16; }, getSWFHTML: function() { var _19 = ""; if(navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { if(this.getAttribute("doExpressInstall")) { this.addVariable("MMplayerType", "PlugIn"); this.setAttribute("swf", this.xiSWFPath); } _19 = "<embed type=\"application/x-shockwave-flash\" src=\"" + this.getAttribute("swf") + "\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" style=\"" + this.getAttribute("style") + "\""; _19 += " id=\"" + this.getAttribute("id") + "\" name=\"" + this.getAttribute("id") + "\" "; var _1a = this.getParams(); for(var key in _1a) { _19 += [key] + "=\"" + _1a[key] + "\" "; } var _1c = this.getVariablePairs().join("&"); if(_1c.length > 0) { _19 += "flashvars=\"" + _1c + "\""; } _19 += "/>"; } else { if(this.getAttribute("doExpressInstall")) { this.addVariable("MMplayerType", "ActiveX"); this.setAttribute("swf", this.xiSWFPath); } _19 = "<object id=\"" + this.getAttribute("id") + "\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" style=\"" + this.getAttribute("style") + "\">"; _19 += "<param name=\"movie\" value=\"" + this.getAttribute("swf") + "\" />"; var _1d = this.getParams(); for(var key in _1d) { _19 += "<param name=\"" + key + "\" value=\"" + _1d[key] + "\" />"; } var _1f = this.getVariablePairs().join("&"); if(_1f.length > 0) { _19 += "<param name=\"flashvars\" value=\"" + _1f + "\" />"; } _19 += "</object>"; } return _19; }, write: function(_20) { if(this.getAttribute("useExpressInstall")) { var _21 = new deconcept.PlayerVersion([6, 0, 65]); if(this.installedVer.versionIsValid(_21) && !this.installedVer.versionIsValid(this.getAttribute("version"))) { this.setAttribute("doExpressInstall", true); this.addVariable("MMredirectURL", escape(this.getAttribute("xiRedirectUrl"))); document.title = document.title.slice(0, 47) + " - Flash Player Installation"; this.addVariable("MMdoctitle", document.title); } } if(this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version"))) { var n = (typeof _20 == "string") ? document.getElementById(_20) : _20; n.innerHTML = this.getSWFHTML(); return true; } else { if(this.getAttribute("redirectUrl") != "") { document.location.replace(this.getAttribute("redirectUrl")); } } return false; } }; deconcept.SWFObjectUtil.getPlayerVersion = function() { var _23 = new deconcept.PlayerVersion([0, 0, 0]); if(navigator.plugins && navigator.mimeTypes.length) { var x = navigator.plugins["Shockwave Flash"]; if(x && x.description) { _23 = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); } } else { if(navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) { var axo = 1; var _26 = 3; while(axo) { try { _26++; axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + _26); _23 = new deconcept.PlayerVersion([_26, 0, 0]); } catch(e) { axo = null; } } } else { try { var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); } catch(e) { try { var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); _23 = new deconcept.PlayerVersion([6, 0, 21]); axo.AllowScriptAccess = "always"; } catch(e) { if(_23.major == 6) { return _23; } } try { axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); } catch(e) { } } if(axo != null) { _23 = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); } } } return _23; }; deconcept.PlayerVersion = function(_29) { this.major = _29[0] != null ? parseInt(_29[0]) : 0; this.minor = _29[1] != null ? parseInt(_29[1]) : 0; this.rev = _29[2] != null ? parseInt(_29[2]) : 0; }; deconcept.PlayerVersion.prototype.versionIsValid = function(fv) { if(this.major < fv.major) { return false; } if(this.major > fv.major) { return true; } if(this.minor < fv.minor) { return false; } if(this.minor > fv.minor) { return true; } if(this.rev < fv.rev) { return false; } return true; }; deconcept.util = { getRequestParameter: function(_2b) { var q = document.location.search || document.location.hash; if(_2b == null) { return q; } if(q) { var _2d = q.substring(1).split("&"); for(var i = 0; i < _2d.length; i++) { if(_2d[i].substring(0, _2d[i].indexOf("=")) == _2b) { return _2d[i].substring((_2d[i].indexOf("=") + 1)); } } } return ""; } }; deconcept.SWFObjectUtil.cleanupSWFs = function() { var _2f = document.getElementsByTagName("OBJECT"); for(var i = _2f.length - 1; i >= 0; i--) { _2f[i].style.display = "none"; for(var x in _2f[i]) { if(typeof _2f[i][x] == "function") { _2f[i][x] = function() { }; } } } }; if(deconcept.SWFObject.doPrepUnload) { if(!deconcept.unloadSet) { deconcept.SWFObjectUtil.prepUnload = function() { __flash_unloadHandler = function() { }; __flash_savedUnloadHandler = function() { }; window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); }; window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); deconcept.unloadSet = true; } } if(!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }; } var getQueryParamValue = deconcept.util.getRequestParameter; var FlashObject = deconcept.SWFObject; var SWFObject = deconcept.SWFObject;
/*} SWFObject>*/

var _forumLastCall = null;
var _forumLastTogglerAnswer = null;
var _forumLastTogglerSubscribe = null;
var _forumLastNode = null;

function _forumGetBasement( control )
{
  return getParentByTagName( control, 'fieldset' );
}

function _forumGetControl( basement, tag, ident )
{
  var controls = basement.getElementsByTagName( tag );
  for( var i = 0; i < controls.length; i++ ) 
    if( containsInClassName( controls[i], ident ) ) 
      return controls[i];
  return null;
}

function _forumSetTogglerChildren( toggler, active )
{
  toggler.innerHTML = active ? 'Скрыть ответы': 'Показать ответы'; 
  adjustClassName( toggler, active, 'h' ) ;
  adjustClassName( toggler, !active, 'j' ) ;
}

function _forumSetTogglerAnswer( toggler, active )
{
  toggler.innerHTML = active ? 'Отказаться от ответа': 'Дать ответ'; 
  adjustClassName( toggler, active, 'l' ) ;
  adjustClassName( toggler, !active, 'k' ) ;
}

function _forumSetTogglerSubscribe( toggler, active )
{
  toggler.innerHTML = active ? 'Отказаться от подписки': 'Подписаться'; 
  adjustClassName( toggler, active, 't' ) ;
  adjustClassName( toggler, !active, 's' ) ;
}

function _forumToggleChildren( toggler )
{
  var basement = _forumGetBasement( toggler );
  var children = getFirstSiblingByTagName( basement, 'div' );
  var expanded = !getVisible( children );
  _forumSetTogglerChildren( toggler, expanded );
  setVisible( children, expanded );
}

function _forumToggleAnswer( toggler )
{
  var basement = _forumGetBasement( toggler );
  var form = getLastChildByTagName( basement, 'table' );
  var active = form && ( form.id == 'forumMessage' );
  if( active )
  {
    document.getElementById( 'forumMessageDock' ).appendChild( form );
    _forumSetTogglerAnswer( toggler, false );
    _forumLastTogglerAnswer = null;
  }
  else
  {
    if( _forumLastTogglerAnswer )
      _forumToggleAnswer( _forumLastTogglerAnswer );
    if( _forumLastTogglerSubscribe )
      _forumToggleSubscribe( _forumLastTogglerSubscribe );
    form = document.getElementById( 'forumMessage' );
    basement.appendChild( form );
    document.getElementById( 'forumMessageText' ).focus();
    _forumSetTogglerAnswer( toggler, true );
    _forumLastTogglerAnswer = toggler;
  }
}

function _forumToggleSubscribe( toggler )
{
  var basement = _forumGetBasement( toggler );
  var form = getLastChildByTagName( basement, 'table' );
  var active = form && ( form.id == 'forumSubscribe' );
  if( active )
  {
    document.getElementById( 'forumSubscribeDock' ).appendChild( form );
    _forumSetTogglerSubscribe( toggler, false );
    _forumLastTogglerSubscribe = null;
  }
  else
  {
    if( _forumLastTogglerAnswer )
      _forumToggleAnswer( _forumLastTogglerAnswer );
    if( _forumLastTogglerSubscribe )
      _forumToggleSubscribe( _forumLastTogglerSubscribe );
    form = document.getElementById( 'forumSubscribe' );
    basement.appendChild( form );
    document.getElementById( 'forumSubscribeEmail' ).focus();
    _forumSetTogglerSubscribe( toggler, true );
    _forumLastTogglerSubscribe = toggler;
  }
}

function _forumClicked( event )
{
  if( _forumLastCall )
    return stopEvent( event );
  var control = getEventSource( event );
  if( control )
  {
    if( control.tagName.toLowerCase() == 'a' )
    {
      if( containsInClassName( control, 'f' ) )
        _forumToggleChildren( control );
      else if( containsInClassName( control, 'g' ) )
        _forumToggleAnswer( control );
      else if( containsInClassName( control, 'o' ) )
        _forumGratitudeSend( control );
      else if( containsInClassName( control, 'q' ) )
        _forumToggleSubscribe( control );
      else  
        return true;  
      return stopEvent( event );
    }
  }
  return true;
}

function _forumMouseOver( event )
{
  var control = getEventSource( event );
  if( control )
  {
    if( control.tagName.toLowerCase() == 'a' )
    {
      if( containsInClassName( control, 'f' ) )
        control.title = control.innerHTML;
      else if( containsInClassName( control, 'g' ) )
        control.title = control.innerHTML;
      else if( containsInClassName( control, 'o' ) )
        control.title = control.innerHTML;
      else if( containsInClassName( control, 'q' ) )
        control.title = control.innerHTML;
      else if( containsInClassName( control, 'b' ) )
        control.title = 'Перейти на постоянную страницу темы';
    }
    else if( control.tagName.toLowerCase() == 'img' )
    {
      if( control.src.endsWith( '1.gif' ) )
        control.title = 'Важная тема';
      else if( control.src.endsWith( '0.gif' ) )
        control.title = 'Тема исчерпана';
    }
  }
  return true;
}

function _forumMouseOut( event )
{
  var control = getEventSource( event );
  if( control )
  {
    if( control.tagName.toLowerCase() == 'a' )
    {
      if( containsInClassName( control, 'f' ) )
        control.title = null;
      else if( containsInClassName( control, 'g' ) )
        control.title = null;
      else if( containsInClassName( control, 'o' ) )
        control.title = null;
      else if( containsInClassName( control, 'q' ) )
        control.title = null;
      else if( containsInClassName( control, 'b' ) )
        control.title = null;
    }
    else if( control.tagName.toLowerCase() == 'img' )
    {
      if( control.src.endsWith( '1.gif' ) )
        control.title = null;
      else if( control.src.endsWith( '0.gif' ) )
        control.title = null;
    }
  }
  return true;
}

function _forumPostChanged( errorID )
{
  setVisible( document.getElementById( errorID ), false );
}

function _forumPostCheck(/*arguments*/)
{
  var error = false;
  for( var i = 0; i < arguments.length; )
  {
    var controlID = arguments[i++];
    var errorID = arguments[i++];
    var isNullable = arguments[i++];
    var isMail = arguments[i++];
    var control = document.getElementById( controlID );
    if( !control.disabled )
    {
      var text = control.value.trim()
      var valid = true;
      if( text.length > 0 )
      {
        if( isMail )
        {
          var index = text.indexOf( '@' ) + 1;
          valid = ( index > 1 )&&( text.indexOf( '.' ) > index );
        }
      }
      else
        valid = isNullable;
      if( !valid )
      {
        setVisible( document.getElementById( errorID ), true );
        control.focus();
        error = true;
      }
    }
  }
  return error;
}

function _forumClearLastNode()
{
  if( _forumLastNode )
  {
    removeFromClassName( _forumLastNode, 'lastNode' );
    _forumLastNode = null;
  }
}

function _forumSetLastNode( id )
{
  _forumClearLastNode();
  _forumLastNode = document.getElementById( id );
  if( _forumLastNode )
  {
    appendToClassName( _forumLastNode, 'lastNode' ); 
    _forumLastNode.scrollIntoView( false );
    _forumLastNode.focus();
  }
}

function _forumThemeBlockVisible( visible )
{
  setVisible( document.getElementById( 'forumThemeBlock' ), visible );
}  


function _forumThemeSend( titleID, textID, authorID, emailID )
{
  document.getElementById( titleID ).readOnly = document.getElementById( textID ).readOnly = document.getElementById( authorID ).readOnly = document.getElementById( emailID ).readOnly = true;
  setVisible( document.getElementById( 'forumThemeButtons' ), false );
  setVisible( document.getElementById( 'forumThemeWait' ), true );
}


function _forumSendError( data )
{
  var text = 'Ошибка. Страница будет обновлена!';
  if( data && data._request && data._request.responseText )
    text = text + '\n\n' + data._request.responseText;
  alert( text );
  location.reload( true );  
}  


function _forumMessageWait( wait )
{
  document.getElementById( 'forumMessageText' ).readOnly = document.getElementById( 'forumMessageAuthor' ).readOnly = document.getElementById( 'forumMessageEmail' ).readOnly = wait;
  setVisible( document.getElementById( 'forumMessageButtons' ), !wait );
  setVisible( document.getElementById( 'forumMessageWait' ), wait );
  _forumThemeBlockVisible( !wait );
}  

function _forumMessageError( data )
{
  _forumMessageWait( false );
  _forumSendError( data );
}  

function _forumMessageComplete( data )
{
  _forumLastCall = null;
  _forumClearLastNode();
  var text = data._request.responseText;
  var divider = text.indexOf( '|' );
  var lastAnswerID = text.substr( 0, divider );
  text = text.substr( divider + 1 );
  var form = document.getElementById( 'forumMessage' );
  var basement = _forumGetBasement( form );
  var children = getFirstSiblingByTagName( basement, 'div' );
  setVisible( children, true );
  children.innerHTML += text;
  var toggler = _forumGetControl( basement, 'a', 'f' );
  setVisible( toggler, true );
  _forumSetTogglerChildren( toggler, true );
  document.getElementById( 'forumMessageText' ).value = '';
  if( document.getElementById( 'forumMessageSubscribe' ).checked )
    document.getElementById( 'forumSubscribeEmail' ).value = document.getElementById( 'forumMessageEmail' ).value;
  document.getElementById( 'forumMessageEmail' ).disabled = true;
  document.getElementById( 'forumMessageSubscribe' ).checked = false;
  _forumMessageWait( false );
  _forumToggleAnswer( _forumLastTogglerAnswer );
  _forumSetLastNode( lastAnswerID ); 
}

function _forumMessageSend()
{
  _forumMessageWait( true );
  var form = document.getElementById( 'forumMessage' );
  var basement = _forumGetBasement( form );
  var author = document.getElementById( 'forumMessageAuthor' ).value;
  var text = document.getElementById( 'forumMessageText' ).value;
  var email = document.getElementById( 'forumMessageSubscribe' ).checked ? document.getElementById( 'forumMessageEmail' ).value : '';
  var args = packArguments( '0', '0', '1', basement.id, '2', author, '3', text, '4', email );
  _forumLastCall = call( '/Forum.ashx', args, 60000, _forumMessageComplete, _forumMessageError, _forumMessageError );
}


function _forumGratitudeComplete( data )
{
  _forumLastCall = null;
  var text = data._request.responseText;
  var divider = text.indexOf( '|' );
  var id = text.substr( 0, divider );
  var content = text.substr( divider + 1 );
  var basement = document.getElementById( id );
  if( basement )
  {
    var control = _forumGetControl( basement, 'div', 'p' );
    control.innerHTML = content;
  } 
}

function _forumGratitudeSend( control )
{
  setVisible( control, false );
  var basement = _forumGetBasement( control );
  var args = packArguments( '0', '1', '1', basement.id );
  _forumLastCall = call( '/Forum.ashx', args, 60000, _forumGratitudeComplete, _forumSendError, _forumSendError );
}


function _forumSubscribeWait( wait )
{
  document.getElementById( 'forumSubscribeEmail' ).readOnly = wait;
  setVisible( document.getElementById( 'forumSubscribeButtons' ), !wait );
  setVisible( document.getElementById( 'forumSubscribeWait' ), wait );
  _forumThemeBlockVisible( !wait );
}  

function _forumSubscribeError( data )
{
  _forumSubscribeWait( false );
  _forumSendError( data );
}  

function _forumSubscribeEndComplete()
{
  setVisible( document.getElementById( 'forumSubscribeInfo' ), false );
  _forumLastCall = null;
  _forumSubscribeWait( false );
  setVisible( _forumLastTogglerSubscribe, false );
  _forumToggleSubscribe( _forumLastTogglerSubscribe );
  document.getElementById( 'forumMessageEmail' ).value = document.getElementById( 'forumSubscribeEmail' ).value;
}

function _forumSubscribeComplete( data )
{
  setVisible( document.getElementById( 'forumSubscribeWait' ), false );
  var text = data._request.responseText;
  var divider = text.indexOf( '|' );
  var id = text.substr( 0, divider );
  var content = text.substr( divider + 1 );
  var control = document.getElementById( 'forumSubscribeInfo' );
  if( content && content.length )
    control.innerHTML = content;
  setVisible( control, true );
  setTimeout( _forumSubscribeEndComplete, 500 );
}

function _forumSubscribeSend()
{
  _forumSubscribeWait( true );
  var form = document.getElementById( 'forumSubscribe' );
  var basement = _forumGetBasement( form );
  var email = document.getElementById( 'forumSubscribeEmail' ).value;
  var args = packArguments( '0', '2', '1', basement.id, '2', email );
  _forumLastCall = call( '/Forum.ashx', args, 60000, _forumSubscribeComplete, _forumSubscribeError, _forumSubscribeError );
}

function forumFormValidateFields()
{
  var errors = 0;
  for( var i = 0; i < arguments.length; )
  {
    var control = document.getElementById( arguments[i++] );
    if( control )
    {
      var error = document.getElementById( arguments[i++] );
      if( error )
      {
        var text = control.value.replace( /^\\s+|\\s+$/g, '' );
        if( !text.length )
        {
          setVisible( error, true );
          if( !errors )
            control.focus();
          errors++;
        }
        else
          setVisible( error, false );
      }
    }
  }
  return errors;
}

function forumFormFieldChanged( visible )
{
  for( var i = 1; i < arguments.length; i++ )
    setVisible( document.getElementById( arguments[i] ), visible );
}

var forumLastDisplayedForm = null;

function forumToggleDisplay( toggleID, toggleImageID, index, titles, images, css, toggle )
{
  if( !toggle )
    toggle = document.getElementById( toggleID );
  if( toggle )
  {
    if( titles )
      toggle.innerHTML = titles[index];
    if( css )
      toggle.className = css[index];
  }
  var toggleImage = document.getElementById( toggleImageID );
  if( toggleImage )
  {
    if( images )
      toggleImage.src = images[index];
    if( titles )
      toggleImage.alt = titles[index];
  }
}

function forumToggleDisplayForm( formsID, toggleFormsID, toggleFormsImageID, toggle )
{
  var forms = document.getElementById( formsID );
  if( forms )
  {
    if( getVisible( forms ) )
    {
      setVisible( forms, false );
      forumLastDisplayedForm = null;
      forumToggleDisplay( toggleFormsID, toggleFormsImageID, 1, forumFormsTitles, forumFormsImages, forumFormsCss, toggle );
    }
    else
    {
      if( forumLastDisplayedForm )
      {
        setVisible( document.getElementById( forumLastDisplayedForm[0] ), false );
        forumToggleDisplay( forumLastDisplayedForm[1], forumLastDisplayedForm[2], 1, forumFormsTitles, forumFormsImages, forumFormsCss, forumLastDisplayedForm[3] );
      }
      setVisible( forms, true );
      forumLastDisplayedForm = [ formsID, toggleFormsID, toggleFormsImageID, toggle ];
      forumToggleDisplay( toggleFormsID, toggleFormsImageID, 0, forumFormsTitles, forumFormsImages, forumFormsCss, toggle );
    }
  }
  return false;
}

function forumToggleDisplayNodes( nodesID, toggleNodesID, toggleNodesImageID, toggle )
{
  var nodes = document.getElementById( nodesID );
  if( nodes )
  {
    if( getVisible( nodes ) )
    {
      if( forumLastDisplayedForm )
        forumToggleDisplayForm( forumLastDisplayedForm[0], forumLastDisplayedForm[1], forumLastDisplayedForm[2], forumLastDisplayedForm[3] );
      setVisible( nodes, false );
      forumToggleDisplay( toggleNodesID, toggleNodesImageID, 1, forumNodesTitles, forumNodesImages, forumNodesCss, toggle );
    }
    else
    {
      setVisible( nodes, true );
      forumToggleDisplay( toggleNodesID, toggleNodesImageID, 0, forumNodesTitles, forumNodesImages, forumNodesCss, toggle );
    }
  }
  return false;
}

function DoTogglePopup(event, toggleControlID, controlID, location, trackPopup)
{
  if (!document.body.__control)
  {
    if (trackPopup && trackPopup.length)
      if (_gaq)
        _gaq.push(['_trackPageview', trackPopup]);
    document.body.__toggleControl = WebForm_GetElementById(toggleControlID);
    document.body.__control = WebForm_GetElementById(controlID);
    document.body.__location = location;
    document.body.__oldOnClick = document.body.onclick;
    document.body.onclick = DoBodyClicked;
    document.body.__oldOnResize = document.body.onresize;
    document.body.onresize = DoBodyResized;
    document.body.__control.style.display = '';
    DoBodyResized();
    event = event || window.event;
    event.cancelBubble = true;
    if (event.stopPropagation)
      event.stopPropagation();
    return false;
  }
  else
    DoHidePopup();
}

function DoHidePopup()
{
  if (document.body.__control)
  {
    document.body.__control.style.display = 'none';
    document.body.__toggleControl = null;
    document.body.__control = null;
    document.body.__location = null;
    document.body.onclick = document.body.__oldOnClick;
    document.body.onresize = document.body.__oldOnResize;
  }
}

function DoBodyClicked(event)
{
  if (document.body.__control)
  {
    event = event || window.event;
    var target = event.target || event.srcElement;
    while (target)
    {
      if (target == document.body.__control)
        return;
      target = target.parentNode;
    }
    DoHidePopup();
  }
}

function DoBodyResized()
{
  if (document.body.__control)
  {
    var positionToggleControl = WebForm_GetElementPosition(document.body.__toggleControl);
    var positionControl = WebForm_GetElementPosition(document.body.__control);
    var x;
    var y;
    switch (document.body.__location)
    {
      case 1: //BelowAndRight
        x = positionToggleControl.x + positionToggleControl.width + 5;
        y = positionToggleControl.y + positionToggleControl.height + 5;
        break;
      case 2: //Above
        x = positionToggleControl.x + 5;
        y = positionToggleControl.y - positionControl.height - 5;
        break;
      case 3: //AboveAndRight
        x = positionToggleControl.x + positionToggleControl.width + 5;
        y = positionToggleControl.y - positionControl.height - 5;
        break;
      case 4: //AboveCenter
        x = positionToggleControl.x + positionToggleControl.width / 2 - positionControl.width / 2;
        y = positionToggleControl.y - positionControl.height - 5;
        break;
      case 5: //BelowAndLeft
        x = positionToggleControl.x + positionToggleControl.width - positionControl.width - 5;
        y = positionToggleControl.y + positionToggleControl.height + 5;
        break;
      default: // Below
        x = positionToggleControl.x + 5;
        y = positionToggleControl.y + positionToggleControl.height + 5;
        break;
    }
    WebForm_SetElementX(document.body.__control, x);
    WebForm_SetElementY(document.body.__control, y);
  }
}

function ReceiveCompareData( categories, productID )
{
  window.Js_Navigate( '/ProductFullCharacteristics/' + productID + '/IsCompare1_1/', 'ionCompare' + categories, '', true );
}

function AddToCompare( uniqueID, productID )
{
  WebForm_DoCallback( uniqueID, 'addToCompare_' + productID, ReceiveCompareData, productID, null, true );
}

function TitleSetVisible( controlID, contentID, visible )
{
  var control = document.getElementById( controlID );
  var content = document.getElementById( contentID );
  if( visible == null )
    visible = !getVisible( content );
  setVisible( content, visible );
  if( titleImages )
  {
    var images = control.getElementsByTagName( 'img' );
    if( visible )
    {
      images[1].src = titleImages[0];
      images[2].src = titleImages[1];
    }
    else
    {
      images[1].src = titleImages[2];
      images[2].src = titleImages[3];
    }
  }
  return visible;
}

function TitleToggle( uniqueID, controlID, contentID, callback )
{
  var args = TitleSetVisible( controlID, contentID ) ? '1' : '0';
  if( callback )
    WebForm_DoCallback( uniqueID, args, null, null, null, true );
}

function TitleRadioToggle( uniqueID, controlID, contentID, callback/*, controlID1, contentID1, controlID2, contentID2*/ )
{
  TitleSetVisible( controlID, contentID, true );
  for( var i = 4; i < arguments.length; i += 2 )
    TitleSetVisible( arguments[ i ], arguments[ i + 1 ], false );
  if( callback )
    WebForm_DoCallback( uniqueID, null, null, null, null, true );
}


function toggleAp( control )
{
  getFirstChildByTagName( control, 'img' ).src = toggleVisible( getLastChildByTagName( control.parentNode, 'div' ) ) ? '/Images/box_open.gif' : '/Images/box_close.gif';
}
var remainsLastContent = null;
var remainsLastImage = null;

function RemainsToggleVerbose(contentID, imageID, productID, shopID, track)
{
  var content = document.getElementById(contentID);
  var image = document.getElementById(imageID);
  if (remainsLastContent)
  {
    if (remainsLastContent != content)
    {
      setVisible(remainsLastContent, false);
      remainsLastImage.src = remainsImages[1];
    }
  }
  if (getVisible(content))
  {
    remainsLastContent = null;
    remainsLastImage = null;
    setVisible(content, false);
    image.src = remainsImages[1];
  }
  else
  {
    if (_gaq)
      _gaq.push(['_trackPageview', '/' + track + '/' + productID + '/' + shopID]);
    remainsLastContent = content;
    remainsLastImage = image;
    setVisible(content, true);
    image.src = remainsImages[0];
  }
  return false;
}
var ShopsStandardLastContent = null;
var ShopsStandardLastImage = null;

function ShopsStandardToggleVerbose( contentID, imageID )
{
  var content = document.getElementById( contentID );
  var image = document.getElementById( imageID );
  if( ShopsStandardLastContent )
  {
    if( ShopsStandardLastContent != content )
    {
      setVisible( ShopsStandardLastContent, false );
      ShopsStandardLastImage.src = ShopsStandardImages[1];
    }
  }
  if( getVisible( content ) )
  {
    ShopsStandardLastContent = null;
    ShopsStandardLastImage = null;
    setVisible( content, false );
    image.src = ShopsStandardImages[1];
  }
  else
  {
    ShopsStandardLastContent = content;
    ShopsStandardLastImage = image;
    setVisible( content, true );
    image.src = ShopsStandardImages[0];
  }
  return false;
}
function AdShow(e_AdEngine, e_Width, e_Height, e_ProductCategory, e_Brand, e_Product, e_Place)
{
  document.write
  (
    "<iframe style=\"width:" + e_Width + "px;height:" + e_Height + "px;margin:0;border:0;padding:0;\" frameborder=\"0\" scrolling=\"no\" src=\"" + e_AdEngine + "/Show.aspx?Width=" + e_Width + "&Height=" + e_Height + "&Referrer=" + encodeURIComponent(document.referrer) + (typeof (e_Place) != "undefined" ? "&Place=" + e_Place : "") + (typeof (e_ProductCategory) != "undefined" ? "&ProductCategory=" + e_ProductCategory : "") + (typeof (e_Brand) != "undefined" ? "&Brand=" + e_Brand : "") + (typeof (e_Product) != "undefined" ? "&Product=" + e_Product : "") + "\"></iframe>"
  );
}
