var $D = YAHOO.util.Dom;
var $E = YAHOO.util.Event;
var calendar;
var over_cal = false;
var cur_field = '';
var $ = $D.get; // get element by ID

var init = function(){
	calendar = new YAHOO.widget.Calendar("calendar","calContainer");
	calendar.selectEvent.subscribe(getDate, calendar, true);
	calendar.renderEvent.subscribe(setupListeners, calendar, true);
	$E.addListener(['txtFrom', 'txtTo'], 'focus', showCal);
	$E.addListener(['txtFrom', 'txtTo'], 'blur', hideCal);
	calendar.render();
}
var setupListeners = function(){
	$E.addListener('calContainer', 'mouseover', function(){
		over_cal = true;
	});
	$E.addListener('calContainer', 'mouseout', function(){
		over_cal = false;
	});
}
var getDate = function(){
	var calDate = this.getSelectedDates()[0];
	var dd = 'dd';
	if(calDate.getDate()<10){dd='0'+calDate.getDate()}else{dd=calDate.getDate()}
	var mm = 'mm';
	if((calDate.getMonth() + 1)<10){mm='0'+(calDate.getMonth() + 1)}else{mm=(calDate.getMonth() + 1)}
	calDate = dd + '/' + mm + '/' + calDate.getFullYear();
	cur_field.value = calDate;
	over_cal = false;
	hideCal();
}
var showCal = function(ev){
	var tar = $E.getTarget(ev);
	cur_field = tar;
	var xy = $D.getXY(tar),
	date = $D.get(tar).value;
	if(date){
		calendar.cfg.setProperty('selected', date);
	calendar.cfg.setProperty('pagedate', new Date(date), true);
	} else {
		calendar.cfg.setProperty('selected', '');
		calendar.cfg.setProperty('pagedate', new Date(), true);
	}
	calendar.render();
	$D.setStyle('calContainer', 'display', 'block');
	xy[1] = xy[1] + 20;
	$D.setXY('calContainer', xy);
}
var hideCal = function(){
	if(!over_cal){
		$D.setStyle('calContainer', 'display', 'none');
	}
}

// Standard Advanced options
function createSearchToggle(text){
	if($('rcsearch_options')){
		if($('searchtoggle')){
			$('searchtoggle').parentNode.removeChild($('searchtoggle'));
		}
		searchToggleListItem=document.createElement("li");
		searchToggleListItem.id="searchtoggle";
		searchToggleLink=document.createElement("a");
		searchToggleLink.appendChild(document.createTextNode(text)); 
		$E.addListener(searchToggleLink, "click", toggleSearch); 
		searchToggleListItem.appendChild(searchToggleLink);
		$('rcsearch_options').insertBefore(searchToggleListItem,$('rcsearch_options').getElementsByTagName("li")[0]);
	}
}
function toggleSearch(){
	var text1='Standard search';
	var text2='Advanced search';
	if($D.hasClass($('wrapper'),"arabic")){
	var text1='\u0627\u0644\u0628\u062D\u062B \u0627\u0644\u0645\u0628\u0633\u0637';
	var text2='\u0628\u062D\u062B \u0645\u062A\u0642\u062F\u0645';
	}
	
	if(typeof( window[ 'searchType' ] ) != "undefined"){
		if(searchType=='Submit Standard'){
			$D.removeClass($('rcsearch'), 'advanced');
			$D.addClass($('rcsearch'), 'standard');
			createSearchToggle(text2);
		}else if(searchType=='Submit Advanced'){
			$D.removeClass($('rcsearch'), 'standard');
			$D.addClass($('rcsearch'), 'advanced');
			createSearchToggle(text1);
		}else{
			if($D.hasClass($('rcsearch'), 'standard')){
				$D.removeClass($('rcsearch'), 'standard');
				$D.addClass($('rcsearch'), 'advanced');
				createSearchToggle(text1);
			}else{
				$D.removeClass($('rcsearch'), 'advanced');
				$D.addClass($('rcsearch'), 'standard');
				createSearchToggle(text2);
			}
		}
	}else{
		if($D.hasClass($('rcsearch'), 'standard')){
			$D.removeClass($('rcsearch'), 'standard');
			$D.addClass($('rcsearch'), 'advanced');
			createSearchToggle(text1);
		}else{
			$D.removeClass($('rcsearch'), 'advanced');
			$D.addClass($('rcsearch'), 'standard');
			createSearchToggle(text2);
		}
	}
}

//toggle view full/short
function createView(){
	if( $('resultsSection') && ($D.getElementsByClassName('exaleadException').length == 0) ){
       	if($D.hasClass($('wrapper'),"arabic")){
			var viewTextLabel="\u0645\u0634\u0627\u0647\u062F\u0629";
		}else if($D.hasClass($('wrapper'),"french")){
			var viewTextLabel="Vue";
		}else if($D.hasClass($('wrapper'),"spanish")){
			var viewTextLabel="Vista";
		}else if($D.hasClass($('wrapper'),"portuguese")){
			var viewTextLabel="Vista";
		}else if($D.hasClass($('wrapper'),"russian")){
			var viewTextLabel="\u0412\u0438\u0434";
		}else if($D.hasClass($('wrapper'),"chinese")){
			var viewTextLabel="\u89C6\u56FE";
		}else{ //english
			var viewTextLabel="View";
		}	

		if($('viewcontrol')){
			$('viewcontrol').parentNode.removeChild($('viewcontrol'));
		}
		//creating div tag
		var controldiv=document.createElement("div");
		controldiv.id="viewcontrol";
		controldiv.className="controls view";
		//append strong view text to div
		var viewText=document.createElement("strong");
		viewText.appendChild(document.createTextNode(viewTextLabel));
		controldiv.appendChild(viewText);
		//creating ul tag
		var viewul=document.createElement("ul");
		viewul.className="view";
		//creating a tags
		var firstli=document.createElement("li");
		var shorta=document.createElement("a");
		shorta.className="short";
		shorta.title="View Short Results";
		$E.addListener(shorta, "click", toggleView); 
		shorta.appendChild(document.createTextNode('Short results'));
		firstli.appendChild(shorta);
		var secondli=document.createElement("li");
		var fulla=document.createElement("a");
		fulla.className="full";
		fulla.title="View Full Results";
		$E.addListener(fulla, "click", toggleView); 
		fulla.appendChild(document.createTextNode('Full results'));
		secondli.appendChild(fulla);
		//append links to view list
		viewul.appendChild(firstli);
		viewul.appendChild(secondli);
		//append ul to div
		controldiv.appendChild(viewul);
		if (searchMode != 'noHighlightBox') {
                $D.getElementsByClassName('highlightbox','div')[0].insertBefore(controldiv,$D.getElementsByClassName('resultsheader','h2')[0]);
                //$D.addClass($('resultsSection'), 'short');
                //$D.getElementsByClassName('highlightbox','div')[0].insertBefore(controldiv,$D.getElementsByClassName('resultsheader','h2')[0]);
		
                if (searchMode == 'full') {
                    $D.removeClass($('resultsSection'), 'short');
                    $D.addClass($('resultsSection'), 'full');
                    $D.removeClass($D.getElementsByClassName('short','a')[0],'selected');
                    this.className="full selected";
                    document.getElementById("searchMode").value = "full";
                    toggleLinks("full");   
                 }
		 }
	}
}
function toggleView(){
		if(trim(this.className) == 'full' && $D.hasClass($('resultsSection'), 'short')){
			$D.removeClass($('resultsSection'), 'short');
			$D.addClass($('resultsSection'), 'full');
			$D.removeClass($D.getElementsByClassName('short','a')[0],'selected');
			this.className="full selected";
                        document.getElementById("searchMode").value = "full";
                        toggleLinks("full");
		}else if(trim(this.className) == 'short' && $D.hasClass($('resultsSection'), 'full')){
			$D.removeClass($('resultsSection'), 'full');
			$D.addClass($('resultsSection'), 'short');
			$D.removeClass($D.getElementsByClassName('full','a')[0],'selected');
			this.className="short selected";
                        document.getElementById("searchMode").value = "short";
                        toggleLinks("short");
		}
}

function toggleLinks(value) {
	var listitems = document.getElementById("content").getElementsByTagName("a");
	
	for (i=0; i<listitems.length; i++) {
          if (listitems[i].href.split("?").length == 2) {
            listitems[i].href = 
              listitems[i].href.split("?")[0] + "?" + 
              changeQueryStringParameter(listitems[i].href.split("?")[1], "searchMode", value);
          }
        }
};

function changeQueryStringParameter(queryParams, fieldName, value) {
    var searchFor = "&" + fieldName + "=";
	
    if (queryParams.indexOf(searchFor) > -1) {
            left = queryParams.substring(0, queryParams.indexOf(searchFor) + searchFor.length);
            nextAmp = queryParams.indexOf("&", queryParams.indexOf(searchFor) + 1);

            if (nextAmp == -1) {
              queryParams = left + value;
            }
            else {
              right = queryParams.substring(nextAmp);
              queryParams = left + value + right;
            }
    }
    else {
            queryParams += "&" + fieldName + "=" + value;
    }

    return queryParams;
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
//redirect archive
function redirectIt(evt){
	if(this.checked){
			$('includeArchiveForm').submit();
	}
}
function redirectArchive(){
	// find any redirect select boxes
	var redirectArchive = $D.getElementsByClassName('checkredirect','input');
	// add listeners
	$E.on(redirectArchive,'click',redirectIt);
}

var search = function() {

if($('rcsearch')){  
	//language textual options
	if($D.hasClass($('wrapper'),"arabic")){
		var searchkeywordsText="\u0623\u062F\u062E\u0644 \u0627\u0644\u0643\u0644\u0645\u0627\u062A \u0627\u0644\u0631\u0626\u064A\u0633\u064A\u0629";
	}else if($D.hasClass($('wrapper'),"french")){
		var searchkeywordsText="Taper des mots cl\u00E9s";
	}else if($D.hasClass($('wrapper'),"spanish")){
		var searchkeywordsText="Ingresar palabras clave";
	}else if($D.hasClass($('wrapper'),"portuguese")){
		var searchkeywordsText="Inserir palavras-chaves";
	}else if($D.hasClass($('wrapper'),"russian")){
		var searchkeywordsText="\u0412\u0432\u0435\u0441\u0442\u0438 \u043A\u043B\u044E\u0447\u0435\u0432\u044B\u0435 \u0441\u043B\u043E\u0432\u0430";
	}else if($D.hasClass($('wrapper'),"chinese")){
		var searchkeywordsText="\u8F93\u5165\u5173\u952E\u8BCD";
	}else{ //english
		var searchkeywordsText="Enter keywords";
	}	
	if(!$D.hasClass($('content'),"js")){$D.addClass($('content'),"js")}
	//set up all text input "Enter keywords", onfocus and onblur
	var keywordsinputs = $D.getElementsByClassName('keywords','input','rcsearch');
	for (var j = 0; j < keywordsinputs.length; j++) {
            if (keywordsinputs[j].value == '') {
		keywordsinputs[j].value=searchkeywordsText;
		keywordsinputs[j].onfocus=function(){if(this.value == searchkeywordsText){this.value = '';}}
		keywordsinputs[j].onblur=function(){if(!this.value.length){this.value = searchkeywordsText;}}
            }
        }

	//FF bug with overflow set up to hidden on contentBlock div
	var contentblockdiv = $D.getElementsByClassName('contentBlock','div');
	if(contentblockdiv.length>0){
		$D.setStyle(contentblockdiv[0],'overflow','visible');
	}
	//add calendar div
	calendardiv=document.createElement("div");
	calendardiv.id="calContainer";
	$('rcsearch').appendChild(calendardiv);
	//createView();
	//redirectArchive();
	init();
}
	
};

$E.onDOMReady(search);
