var objPageHandler = new function(){
    
	var m_ActiveClass		= " ie-active";
	var m_ActiveRegEx		= new RegExp(m_ActiveClass + "\\b");
	var m_PrevActiveClass	= " prev-ie-active";
	var m_PrevActiveRegEx	= new RegExp(m_PrevActiveClass + "\\b");
	var m_TargetClass		= " ie-target";
	/*var m_TargetRegEx		= new RegExp(m_TargetClass + "\\b");*/
	var m_TargetedClass		= " ie-targeted";
	var m_TargetedRegEx		= new RegExp(m_TargetedClass + "\\b");
    var m_UrlHash			= "";
	
	this.OnLoad = function(){
	    if(objPageHandler.IsIE()){
	        document.onpropertychange = objPageHandler.OnTargetChanged;
		    objPageHandler.InitzializeLinks();
		}
	}

	this.InitzializeLinks = function(){
        
	    var anchors = document.getElementsByTagName("a");

	    for (var i=0; i<anchors.length; i++) {
		    var anchor = anchors[i];
		    var href = anchor.getAttribute("href");
		    var title = null;
		    
		    if(href != null){
		        objPageHandler.CheckTitleForExt(anchor, title);
		    }
	    }		    
    }
	this.IsIE = function(){
		var agt = navigator.userAgent.toLowerCase();
		return ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1) );
	}
	/**************************************
	IE Repairing Scripts START
	**************************************/
	this.CheckTitleForExt = function(anchor, title){
		var extensions = new Array("doc","pdf","xls","ppt","pub","exe");
		var ext = anchor.href.substring(anchor.href.lastIndexOf(".") + 1);
		for(var i in extensions){
			if(ext.toLowerCase() == extensions[i]){
				anchor.className += " ext-" + ext.toLowerCase();
			}
		}
		return false;
	}
	this.OnTargetChanged = function(){
		if(document.location.hash != m_UrlHash){
			if(m_UrlHash != ""){
				var oldTarget = document.getElementById(m_UrlHash.slice(1));
				if(oldTarget != null){	    
					oldTarget.className = oldTarget.className.replace(new RegExp(m_TargetClass + "\\b"), "");
					if(oldTarget.nextSibling != null){
						oldTarget.nextSibling.className = oldTarget.nextSibling.className.replace(m_TargetedRegEx, "");
					}
				}
			}
			m_UrlHash = document.location.hash;
			if(m_UrlHash != ""){
				var newTarget = document.getElementById(m_UrlHash.slice(1));
				if(newTarget != null){
				    m_TargetClass = " ie-target";
				    if(newTarget.className.indexOf("media") > -1){
				        m_TargetClass += "-media";
				    }else if(newTarget.className.indexOf("ir") > -1){
				        m_TargetClass += "-ir";
				    }else if(newTarget.className.indexOf("business") > -1){
				        m_TargetClass += "-business";
				    }
//					newTarget.className += m_TargetClass;
//					if(newTarget.nextSibling != null){
//						newTarget.nextSibling.className += m_TargetedClass;
//					}
				}
			}
		}
	}
}
if(document.addEventListener)
	document.addEventListener("load", objPageHandler.OnLoad, false);
if(window.addEventListener)
	window.addEventListener("load", objPageHandler.OnLoad, false);
else if(window.attachEvent)
	window.attachEvent("onload", objPageHandler.OnLoad);

// ** Ajax auto suggest **
function SubmitFormOnEnter(submitBtn, e)
{   
    if(e.keyCode == 13) //Addon by lso to get the form submitted in firefox
    {
        DoSubmit(submitBtn);
        }
}
function DoSubmit(submitBtn)
{
    document.getElementById(submitBtn).click();
}
function GetSuggestions(item, updatepanel, match, e, submitBtn) {
    if((isUpOrDownKey(e)==true) && (_SuggestionIsVisible(updatepanel)==false))
    {
     return;
    }
//    if(e.keyCode == 13) //Addon by lso to get the form submitted in firefox
//    {
//        DoSubmit(submitBtn);
//        }
    var tbox = getObj(item);
    var imatch = getObj(match);
    var hiddenValue = CheckForItemsIntempDiv(updatepanel, e, item); //if keys are up n down, set style classes
    if (hiddenValue != null) {
        tbox.value = hiddenValue; //if enters is pressed
        hideSuggestionElements(updatepanel);
    }

    if (tbox.value == "" || tbox.value == " ")//if value is empty no need to do postback
    {
        hideSuggestionElements(updatepanel);
        return false;
    }

    if (ShouldGetSuggestion(e)) 
    {
        if (SetFoundVisibleToSuggestions(updatepanel, tbox.value) > 0)
            viewSuggestionElements(updatepanel);
        else
            hideSuggestionElements(updatepanel);
    }
    return false;
}

function SetFoundVisibleToSuggestions(updatepanel, tbxValue) 
{
    var tempDiv = getObj(updatepanel);
    var ul = tempDiv.getElementsByTagName("ul")[0];
    var suggestions = 0;
    var UpperdString;
    var lowerdString;

    for (var i = 0; i < ul.getElementsByTagName("li").length; i++) 
    {
        var tempElemt = ul.getElementsByTagName("li")[i];
        var innerTxt = getObjInnerText(tempElemt).toLowerCase();
        var lowerdTbxValue = tbxValue.toLowerCase();
        if(innerTxt.indexOf(lowerdTbxValue)==0)
        {
            tempElemt.style.display = "";
            suggestions += 1;
        }
        else {
                tempElemt.style.display = "none";
             }
    }
    return suggestions;
}


function ShouldGetSuggestion(e) {
    var key = _GetKeyCode(e);
    if ((key >= 48 && key <= 90) || (key == 189) || (key >= 96 && key <= 105) || (key==192) ||(key==221)||(key==222) || (key == 8)) //0-9|a-z|'-'|numpad(0-9) |едц | backspace
        return true;
    return false;
}

function isUpOrDownKey(e)
{
    var arrows = _GetKeyCode(e);
    if (arrows == 38 || arrows == 40 )
        return true;
   return false;
}

function _GetKeyCode(e) {
    var key = (e.which) ? e.which : window.event.keyCode;
    return key;
}

function GetArrows(e) {//only up n down keys
    var arrows = _GetKeyCode(e);
    if (arrows == 38 || arrows == 40 || arrows == 13)
        return arrows;
    return null;
}

function getObjInnerText(obj) {
    if (obj.innerText) { // IE; 
        return obj.innerText;
    }
    else {
        if (obj.textContent) {
            return obj.textContent;
        }
    }
}

function getCurrentSelectedSuggestion(arrayofitems) {
    var selectedIndex = null;
    for (var i = 0; i < arrayofitems.length; i++) {
        var tempElemt = arrayofitems[i];
        var temStr = tempElemt.className;
        if (arrayofitems[i].className == "selected")
            return i;
    }
    return null;
}


function GetArrayOfAvailableItems(elements) 
{
    var arr = new Array();
    for (var i = 0; i < elements.getElementsByTagName("li").length; i++) 
    {
        var tempItem = elements.getElementsByTagName("li")[i];
        if (tempItem.style.display == "")
            arr[arr.length] = tempItem;
    }
    return arr;
}

function SetSelectedSuggestorIndex(elements, key, tbox) {
    var textBox = getObj(tbox);
    var arr = GetArrayOfAvailableItems(elements);
    var selectedIndex = getCurrentSelectedSuggestion(arr);
    
    var elementMaxIndex = ((arr.length<=0)? 0 : arr.length-1);
    var firstElemInlist = 0;
    var nextSelected = null;
    var selectionHiddenElement = getObj("suggestionselectiontext");
    if (selectedIndex == null)//set first element to be selected
    {//if none is selected
        if (key == 38)//up
        {
            arr[elementMaxIndex].className = "selected";
            selectionHiddenElement.value = getObjInnerText(arr[elementMaxIndex]);
                textBox.value = selectionHiddenElement.value.replace(/^\s+|\s+$/g, '') ;
        } else if (key == 40) {

        arr[firstElemInlist].className = "selected";
        selectionHiddenElement.value = getObjInnerText(arr[firstElemInlist]);
        textBox.value = selectionHiddenElement.value.replace(/^\s+|\s+$/g, ''); ;
       
        }
        else if (key = 13)
            return selectionHiddenElement.value;
        return null;
    }
    else {
        if (key == 38)//up
        {
            nextSelected = ((selectedIndex - 1) < 0 ? (elementMaxIndex) : selectedIndex - 1);
        }
        else if (key == 40)//down
        {
            nextSelected = ((selectedIndex + 1) > elementMaxIndex ? firstElemInlist : selectedIndex + 1);
        }
        else if (key == 13)//enter is pressed
        {
            return selectionHiddenElement.value;
        }
        for (var i = 0; i < arr.length; i++) {
            if (i == nextSelected) {
                arr[i].className = "selected";
                selectionHiddenElement.value = getObjInnerText(arr[i]);
                textBox.value = selectionHiddenElement.value.replace(/^\s+|\s+$/g, ''); ;
            }
            else
                arr[i].className = "";
        }
        return null;
    }
    return null;
}

function CheckForItemsIntempDiv(updatepanel, e, tbox) {
    var tempDiv = getObj(updatepanel);
    var ul = tempDiv.getElementsByTagName("ul")[0];
    if (ul == null)
        return;
    var key = GetArrows(e);
    var textSelected = null;
    if (ul.getElementsByTagName("li").length > 0) {
        textSelected = SetSelectedSuggestorIndex(ul, key, tbox);
    }
    if (key == 13)
        return textSelected;
    return null;
}



function getObj(strName) {
    if (document.getElementById) {
        return document.getElementById(strName);
    }
    else if (document.all) {
        return document.all[strName];
    }
    else if (document.layers) {
        return document.layers[strName];
    }
    else {
        return null;
    }
}

function _SuggestionIsVisible(updtpanel)
{
   var paneltoHide = getObj(updtpanel);
    if (paneltoHide != null && paneltoHide.className=="wrapperspan")
        return true;
   return false;
}

function viewSuggestionElements(updtpanel) {
    var paneltoHide = getObj(updtpanel);
    if (paneltoHide != null)
        paneltoHide.className = "wrapperspan";
}

function hideSuggestionElements(updtpanel) {
    var paneltoHide = getObj(updtpanel);
    if (paneltoHide != null)
        paneltoHide.className = "wrapperNone";
}

function fillAutoComplete(updtpanel, ValueToChangeTo, TextboxToChange) {
    var tBoxtoChange = getObj(TextboxToChange);
    tBoxtoChange.value = ValueToChangeTo;
    hideSuggestionElements(updtpanel);
}

// ** EndOfAjax auto suggest **