var oQB;

//oQB=new QueryBuilder();oQB.Init('qb_terms_frm qb_domain_frm qb_link_frm qb_country_frm qb_lang_frm qb_sliders','qb_lnk1 qb_lnk2 qb_lnk3 qb_lnk4 qb_lnk5 qb_lnk6', 'frsh popl mtch'); lb();

function buildQB(){
	oQB=new QueryBuilder();
	oQB.Init('qb_terms_frm qb_domain_frm qb_link_frm qb_country_frm qb_lang_frm qb_sliders','qb_lnk1 qb_lnk2 qb_lnk3 qb_lnk4 qb_lnk5 qb_lnk6', 'frsh popl mtch'); 
	lb();
}

function addClassName(element, name) {
	if(element) {
		if(element.className) {
			var classes = element.className.split(" ");
			var found = false;
			for(var i = 0; i < classes.length; i++) {
				if(classes[i] == name) {
					found = true;
					break;
				}
			}
			if(!found) {
				element.className = element.className + " " + name;
				return true;
			}
			return false;
		}
		else {
			element.className = name;
			return true;
		}
	}
	return false;
}

function removeClassName(element, name) {
	var found = false;
	if(element) {
		if(element.className) {
			var temp = '';
			var classes = element.className.split(" ");
			for(var i = 0; i < classes.length; i++) {
				if(classes[i] != name) {
					if(temp.length > 0) {
						temp += ' ';
					}
					temp += classes[i];
				}
				else {
				    found = true;
				}
			}
			if (found) {
			    element.className = temp;
			}
		}
	}
	return found;
}


////////////////////////
// QueryBuilder Class //
////////////////////////
function QueryBuilder()
{
	this.Forms = new Array();
	this.Links = new Array();
  this.Active = 0;
  this.Init = _initQueryBuilder;
	this.SetActive = _setActive;
}


function _initQueryBuilder(formIDs,linkIDs,sliderIDs) {
	var formIDsArr = formIDs.split(" ");
	var linkIDsArr = linkIDs.split(" ");

    for(var i = 0; i < formIDsArr.length; i++) {
		this.Forms[i] = document.getElementById(formIDsArr[i]);
		this.Links[i] = document.getElementById(linkIDsArr[i]);
	}

	var qb = document.getElementById("qb");
	var qbCommand = document.getElementById("qb_command");
	if(qb && qbCommand)
	{
		var el = qbCommand;
		var pL = 0;
		var pT = 0;
		
		while(el)
		{
			pL+=el.offsetLeft;
			pT+=el.offsetTop;
			el=el.offsetParent;
		}
		
		
		
		pT += 16;
		
		qb.style.position = "absolute";
		//qb.style.left = pL + 'px';
		qb.style.left = (pL - 590) + 'px';
		qb.style.top = pT + 'px';
		qb.style.zIndex = 100;
		qb.style.display = "none";
	}

	var sliderIDsArr = sliderIDs.split(" ");
	for (var i = 0; i < sliderIDsArr.length; i++)
	{
	    var slider = document.getElementById('sld_' + sliderIDsArr[i]);
	    if (slider)
	    {
            var handler = new Slider(slider, sliderIDsArr[i]);

	        bind_method(slider, 'mousemove', handler.mousemove);
	        bind_method(slider, 'mousedown', handler.mousedown);
	        bind_method(slider, 'mouseup', handler.mouseup);
	        
	        var parent = slider.parentNode;
	        while (parent && parent.className != 'sld')
	            parent = parent.parentNode;

	        if (parent)
	        {
	            bind_method(parent, 'mousemove', handler.mousemove, true);
	            bind_method(parent, 'mousedown', handler.mousedown, true);
	            bind_method(parent, 'mouseup', handler.mouseup, true);
	        }
	    }
	}
}

function _setActive(index)
{
	removeClassName(this.Forms[this.Active],"on");
	removeClassName(this.Links[this.Active],"on");

	addClassName(this.Links[index],"on");
	addClassName(this.Forms[index],"on");
	this.Active = index;
}

////////////////////////////
// End QueryBuilder Class //
////////////////////////////

function Slider(el, opr)
{
    var handle = el;
    var operator = opr;
    var sliderY = 0;
    var cap = false;

    this.mousemove = function(evt)
    {
        if (!cap)
            return;

        if (evt.cancelable && evt.preventDefault)
            evt.preventDefault();

		handle.previousSibling.height += evt.clientY - sliderY;
		if(handle.previousSibling.height > 80) {
			handle.previousSibling.height = 80;
		}
		else if(handle.previousSibling.height < 0) {
			handle.previousSibling.height = 0;
		}
		handle.nextSibling.height -= evt.clientY - sliderY;
		if(handle.nextSibling.height > 80) {
			handle.nextSibling.height = 80;
		}		
		else if(handle.nextSibling.height < 0) {
			handle.nextSibling.height = 0;
		}
		sliderY = evt.clientY;
    }
    
    this.mousedown = function(evt)
    {
        if (evt.cancelable && evt.preventDefault)
            evt.preventDefault();

        if (handle.setCapture)
	        handle.setCapture(true);
	        
	    cap = true;	    
	    sliderY = evt.clientY;	
    }
    
    this.mouseup = function(evt)
    {
        if (!cap)
            return;
            
        if (evt.cancelable && evt.preventDefault)
            evt.preventDefault();

        if (handle.releaseCapture)
	        handle.releaseCapture();
	    cap = false;

	    var q1 = document.getElementById("q");
	    if(q1)
	    {
		    var queryIndex = q1.value.indexOf(operator);
		    var newVal = Math.round(handle.nextSibling.height / 80 * 100);
		    if(queryIndex >= 0) {
			    var beforeVal = q1.value.substr(0,queryIndex - 1);
			    var afterVal = q1.value.substr(q1.value.indexOf("}",queryIndex) + 1);
			    q1.value = beforeVal + "{" + operator + "=" + newVal + "}" + afterVal;
		    }
		    else {
			    if(q1.value.length != 0)
				    q1.value += " ";
			    q1.value += "{" + operator + "=" + newVal + "}";
		    }
	    }
	}
}

function getRadioVal(id)
{
	var radioArr = document.getElementsByName(id);
	if(!radioArr)
		return null;
	for(var i = 0; i < radioArr.length; i++)
	{
		if(radioArr[i].checked)
			return radioArr[i].value;
	}	
	return null;
}

function addToQuery(id, operator)
{
	var q = document.getElementById("q");
	var el = document.getElementById(id);
	if (q && el)
	{
		if (q.value.length != 0)
			q.value += ' ';

		q.value += operator + el.value;

	    if (el.type == 'text')
	        el.value = '';
	}
}

function appendWithOr(id, operator)
{
	var q = document.getElementById("q");
	var el = document.getElementById(id);
	if (q && el)
	{
	    var query = q.value;
        var idx = query.indexOf(operator);
	    while (idx >= 0)
	    {
	        if (idx > 0 && query.substr(idx - 1, 1) == '-')
	        {
	            idx = query.indexOf(operator, idx + 1);
	            continue;
	        }

	        if (idx > 0 && query.substr(idx - 1, 1) == '(')
	        {
	            q.value = query.substr(0, idx) + operator + el.value + ' OR ' + query.substr(idx);
	            
	            if (el.type == 'text')
	                el.value = '';
	            return;
	        }
	        
	        var idx2 = query.indexOf(' ', idx);
	        if (idx2 >= 0)
	            q.value = query.substr(0, idx) + '(' + operator + el.value + ' OR ' + query.substr(idx, idx2) + ')' + query.substr(idx2);
	        else
	            q.value = query.substr(0, idx) + '(' + operator + el.value + ' OR ' + query.substr(idx) + ')';

	        if (el.type == 'text')
	            el.value = '';

	        return;
	    }

	    addToQuery(id, operator);
	}
}

function addDomain()
{
	var srchType = getRadioVal("qb_srch_domain_type");
	if(srchType)
	{
		if(srchType == "0")
		    addToQuery('qb_srch_domain', '-site:');
		else
	        appendWithOr('qb_srch_domain', 'site:');
	}
}

function addSearchTerm()
{
	var q = document.getElementById("q");
	var type = document.getElementById("qb_term_srch_type");
	var query = document.getElementById("qb_term_srch_q");
	if(q && type && query)
	{
		if(q.value != 0)
			q.value += ' ';
		if(type.value == "phrase")
			q.value += "\"" + query.value + "\"";
		else if(type.value == "links")
			q.value += "links:(" + query.value + ")";
		else if(type.value == "title")
			q.value += "title:(" + query.value + ")";
		else if(type.value == "all")
			q.value += query.value;
		else if(type.value == "none")
		    q.value += "-(" + query.value + ")";
		else //'any'
		{
			var qValues = query.value.split(' ');
			var endPhrase = '';
			q.value += '(';
			for(var i = 0; i < qValues.length; i++)
			{
				if(i > 0)
				{
					if(endPhrase != '')
					{
						q.value += ' ' + qValues[i];
					}
					else
					{
						q.value += ' OR ' + qValues[i];
					}
				}
				else
				{
					q.value += qValues[i];
				}
				if(endPhrase != '')
				{
					if(qValues[i].substr(qValues[i].length - 1) == endPhrase)
					{
						endPhrase = '';
					}
				}
				else if(qValues[i].indexOf("'") == 0 || qValues[i].indexOf('"') == 0)
				{
					if(qValues[i].indexOf("'") == 0)
						endPhrase = "'";
					else
						endPhrase = '"';
					//look ahead for end phrase
					var foundMatch = false;
					for(var j = i; j < qValues.length; j++)
					{
						if(qValues[j].substr(qValues[j].length - 1) == endPhrase)
						{
							foundMatch = true;		
							break;
						}
					}
					if(!foundMatch || j == i)
						endPhrase = '';
				}
			}
			q.value += ')';
		}
		
		query.value = '';
	}
}


function lb()
{
    if (document.getElementById)
    {
        resizeHandler();
        bind();

        var el = document.getElementById('makehome');
        if (el && el.addBehavior)
        {
            el.addBehavior('#default#homepage');
            if (typeof(curUrl) != 'undefined' && !el.isHomePage(curUrl)) {
                el.style.display = 'block';
            }
        }
    }
}

/*
function mh()
{
    var el = document.getElementById('makehome');
    if (el && el.addBehavior && typeof(curUrl) != 'undefined')
    {
        el.setHomePage(curUrl);

        if (el.isHomePage(curUrl))
            el.style.display = 'none';
    }
}
*/
function bind_method(el, evt, mth, cap)
{
    if (el.addEventListener)
        el.addEventListener(evt, mth, cap);
    else if (el.attachEvent && !cap)
        el.attachEvent('on' + evt, mth);
}

function bind()
{
    var el = document.getElementById('vertical_navigation');
    if (el)
    {
        el = el.lastChild;
        if (el && el.tagName == 'UL')
        {
            var liColl = el.childNodes;
            for (var i = 0; i < liColl.length; i++)
            {
                var a = liColl.item(i).firstChild;
                if (a.tagName == 'A')
                    a.onclick = click_Vertical;
            }
        }
    }

    el = document.getElementById('trygeocombo');
    if (el)
    {
        bind_method(el, 'change', change_TryGeo);

        el = document.getElementById('trygeobtn');
        if (el)
            el.style.display = 'none';
    }
  
    el = document.getElementById('languages');
    if (el)
    {
        var divs = el.childNodes;
        if (divs)
        {
            for (var i = 0; i < divs.length; i++)
                bind_method(divs.item(i).firstChild, 'click', select_LanguageFilter);
        }
    }

    el = document.getElementById('q');
    if (el)
    {
        if (el.focus)
            el.focus();

        bind_method(el, 'keyup', keyup_Q, true);
    }

    el = document.getElementById('ads_topC');
    if (el)
    {
        bindAdHandler(el);

        el = document.getElementById('ads_rightC');
        if (el)
            bindAdHandler(el);

        el = document.getElementById('ads_bottomC');
        if (el)
            bindAdHandler(el);
    }

    window.onresize = resizeHandler;
}

function bindAdHandler(el)
{
    for (var i = 0; i < el.childNodes.length; i++)
    {
        var ul = el.childNodes.item(i);
        if (ul.tagName == 'UL')
        {
            for (var j = 0; j < ul.childNodes.length; j++)
            {
                var li = ul.childNodes.item(j);
                if (li.tagName == 'LI')
                {
                    handler = new AdHandler(li);
                    bind_method(li, 'click', handler.click);
                }
            }

            break;
        }
    }
}

function AdHandler(el)
{
    var me = el;

    this.click = function(evt)
    {
        var srcEl = evt.srcElement ? evt.srcElement : evt.target;
        if (srcEl.tagName != 'A')
            window.location.href = me.firstChild.firstChild.href;
    }
}

function keyup_Q(evt)
{
    if (evt.keyCode)
    {
        if (evt.keyCode == 13)
        {
            var qf = document.getElementById('qf');
            if (qf)
            {
                if (evt.preventDefault)
                    evt.preventDefault();
                    
                qf.submit();
                return false;
            }
        }
    }

    return true;
}

function select_LanguageFilter(evt)
{
    var el = document.getElementById('langlimit');
    if (el)
        el.checked = true;
}
/*
function click_Vertical()
{
    var q = document.getElementById("q").value;
    if (window.encodeURIComponent)
        q = encodeURIComponent(q);

    if (this.href.indexOf('?') > -1)
        this.href = this.href + '&q=' + q;
    else
        this.href = this.href + '?q=' + q;
}
*/
/*
function change_TryGeo(evt)
{
    var el = document.getElementById('trygeocombo');
    if (el)
    {
        if (el.selectedIndex > 0)
        {
            var q = document.getElementById("q").value;
            if (window.encodeURIComponent)
                q = encodeURIComponent(q);

            var option;
            if (el.options.item && el.options.item(el.selectedIndex))
                option = el.options.item(el.selectedIndex);
            else
                option = el.options[el.selectedIndex];

            location.href = "http://" + location.host + location.pathname + "?q=" + q + "&near=" + option.value;
        }
    }
}
*/
function toggleQB(show)
{

    var qb = document.getElementById("qb");
    if(qb)
    {
        if(show && qb.style.display == "none")
        {
            qb.style.display = "block";
            show = true;
        }
        else
        {
            show = false;
            qb.style.display = "none";
        }
    }
    else if (show)
    {
    
        var q = document.getElementById("q").value;
        
        if (window.encodeURIComponent)
            q = encodeURIComponent(q);
     
        //location.href = location.protocol + '//' + location.host + location.pathname + '?qb=1&q=' + q;
        if(location.search == "")
					location.href += "?q=msn&qb=1";
				else
					location.href += "&qb=1";
						
    }
    var qbCommand = document.getElementById("qb_command");
    if(qbCommand)
    {
        qbCommand = qbCommand.firstChild;
        if(show)
            qbCommand.innerHTML = "-" + qbCommand.innerHTML.substr(1);
        else
            qbCommand.innerHTML = "+" + qbCommand.innerHTML.substr(1);
    }
   
}



function resizeHandler()
{
    var bWide = document.body.clientWidth > 980;

    var idx = document.body.className.indexOf(" wide");
    if (idx >= 0 && !bWide)
        document.body.className = document.body.className.substr(0, idx);
    else if (idx < 0 && bWide)
        document.body.className = document.body.className + " wide";
}

