/** Pre-load Images ***/
function preloadImages(imageArray) {
	var tia = new Array();
	var al = imageArray.length;
	for (var i = 0; i < al; i++) {
		tia[i] = new Image();
		tia[i].src = imageArray[i];
	}
}


var ia = [
'images/srchbg.png',
'images/sticky-yellow.png',
'images/stk-yellow-0.png',
'images/stk-yellow-1.png',
'images/tape-yellow.png',
'images/sticky-blue.png',
'images/stk-blue-0.png',
'images/stk-blue-1.png',
'images/tape-blue.png',
'images/sticky-green.png',
'images/stk-green-0.png',
'images/stk-green-1.png',
'images/tape-green.png',
'images/tag.png',
'images/xpbox.png',
'images/browserbox.png',
'images/scaleboxbg.png',
'images/anim0.png',
'images/anim1.png',
'images/loading.png'
];
preloadImages(ia);


//var current_sort = 'sort_d';
var sort_by = 'd'; // d == date posted, e == time ending, p == price
var current_filter = 'filter_i';
var filter_type = 'i';
var current_page = 0;


/* Set sortign order type */

function sortBy(sb) {

	var os = 'sort_'+sort_by;
	sort_by = sb;
	var ns = 'sort_'+sb;
	$(os).className = 'clr-sitetxt cursor-p';
	loadQuestions(filter_type);
	$(ns).className = 'clr-orange cursor-p bold';

}


/* fetch new filters on choosing the filter type*/

function filterType(ft) {
	
	$(current_filter).className = 'clr-sitetxt cursor-p';
	switch (ft) {
		case 'i':
			current_filter = 'filter_i';
			filter_type = 'i';
			loadQuestions('i');
			break;
	
		case 'n':
			current_filter = 'filter_n';
			filter_type = 'n';
			loadQuestions('n');
			break;

		case 'p':
			current_filter = 'filter_p';
			filter_type = 'p';
			loadQuestions('p');
			break;

		case 'c':
			current_filter = 'filter_c';
			filter_type = 'c';
			loadQuestions('c');
			break;
	}
	$(current_filter).className = 'clr-orange cursor-p bold';
}






/* Used by Sort By and Filter By */

function loadQuestions(i) {

	clearAnimations();

	var url = '/questions/'+filter_type+'/1:' + sort_by;


	// Reset the scrollbar before loading the result
	new Ajax.Request(url, {
	  method: 'post',
	  parameters: 'req=count',
	  onSuccess: function(xhr) {
			sbScroll.newcall = true;
			adjustScrollbar(xhr.responseText);
		}
	});

	// Main XHR call

	Effect.Appear('div_loading', {duration:.3});

	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(xhr) {
			Effect.Fade('div_loading', {duration:.3});
			renderStickies(xhr.responseText);
		}
	});	


	$('scale_stat').style.left = '0px';
	//$('scale_stat').style.height = '45px';
	$('scale_pointer').style.left = '0px';
}



/* Search */

display_mode = 'default'; //  this can be default or search

function search(str, page) {
 
 if(str.length > 0)
 {
	//str = (str.length > 0)?str:' ';
	display_mode = 'search';

	clearAnimations();

	var url = '/search/';

	// Reset the scrollbar before loading the result
	new Ajax.Request(url, {
	  method: 'post',
	  parameters: 'qstr='+str+'&page='+page+'&req=count',
	  onSuccess: function(xhr) {
			adjustScrollbar(xhr.responseText);
		}
	});

	// Main XHR call


	Effect.Appear('div_loading', {duration:.3});
	new Ajax.Request(url, {
	  method: 'post',
	  parameters: 'qstr='+str+'&page='+page+'&req=object',
	  onSuccess: function(xhr) {
		    Effect.Fade('div_loading', {duration:.3});
			renderStickies(xhr.responseText);
		}
	});
 }
 else
 {
	alert("Please enter the text for search!");
	document.getElementById('input_tb1').focus();
 }

}


function initApp() {

	if ($('scale_pointer')) {
		
		//new Control.Slider('scale_pointer','div_scale', {onSlide:locateScaleStat});

		//Event.observe('sp_mid', 'mouseover', mouseOver);
		//Event.observe('sp_mid', 'mouseout', mouseOut);		
		
		Event.observe('div_main', 'mouseup', mouseUp);
		Event.observe('input_tb1', 'keyup', keyUp);
		Event.observe('search_button', 'mouseup', mouseUp);		

		/*
		new Control.Slider('scale_pointer','div_scale',{range:$R(0,100), values:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100],
        onSlide:function(v){ sliderMove(v);}});
	*/

/*
		new Control.Slider('scale_pointer','div_scale',{range:$R(0,140), values:[0,5,10,15,20,45],
        onSlide:function(v){ sliderMove(v);}});
	*/

	}

	// Make the first default XHR call

	if (window.location.pathname == '/') {
		var url = '/questions/i/0:'+sort_by;

		// Reset the scrollbar before loading the result
		new Ajax.Request(url, {
		  method: 'post',
		  parameters: 'req=count',
		  onSuccess: function(xhr) {
				sbScroll.newcall = true;
				adjustScrollbar(xhr.responseText);
			}
		});

		Effect.Appear('div_loading', {duration:.3});

		// Main XHR call
		new Ajax.Request(url, {
		  method: 'get',
		  onSuccess: function(xhr) {
				Effect.Fade('div_loading', {duration:.3});
				renderStickies(xhr.responseText);
			}
		});
	}

	if ($('animbutton')) {

		if (getCookie('anim') != 'off' || getCookie('anim') == "") { $('animbutton').src = 'images/anim1.png'; }
		else { $('animbutton').src = 'images/anim0.png'; } 

	}

}

// Current search string

search_string = '';


// What happens when the slider is moved

function sliderMove(v) {

	locateScaleStat();
	slider_pos = v;
	sbScroll.page = 1 + sbScroll.navVals.indexOf(v);

	// Make a query to get the last sticky info for this slider position

	if (display_mode == 'default') {
		var url = '/questions/'+filter_type+'/'+sbScroll.page+':'+sort_by;
		new Ajax.Request(url, {
		  method: 'post',
		  parameters: 'req=stat',
		  onSuccess: function(xhr) {
				setStatTime(xhr.responseText);
			}
		});
	}

	else {
		var url = '/search/';
		new Ajax.Request(url, {
		  method: 'post',
		  parameters: 'qstr='+search_string+'&page='+sbScroll.page+'&req=stat',
		  onSuccess: function(xhr) {
				setStatTime(xhr.responseText);

			}
		});
	}
}




// Sticky objects to be animated
var loadedStickies = new Array();

// Array to contain individual animation onjects
var animationArray = new Array();

// Animate the loading process
function loadAnimation(n) {
	animationArray = new Array(); // Clear all previous animation objects
	var al = loadedStickies.length;
	for (var i = 0; i < al; i++) {
		var t = (1+i)+i*500;
		animationArray[i] = window.setTimeout((function(x) { return function() { Effect.SlideDown($(x)); }; })(loadedStickies[i]), t);
	}
}

// Stop all animations and clear the stickies panel
function clearAnimations() {

	var al = animationArray.length;
	for (var i = 0; i < al; i++) {
		window.clearTimeout(animationArray[i]);
	}

}

/* Create stickies from results */
var xdiv;
function renderStickies(source) {

	//new Effect.SwitchOff($('div_node')); window.setTimeout('Effect.Appear(\'demo-effect-switchoff\', {duration:.3})',2500);
	//alert(source);
	if(source!="")	{
		loadedStickies = new Array();

		for (var i = 1; i <= 6; i++) {
			if (!stuck[i]) {
				var sid = 'sticky_holder_' + i;
				$(sid).innerHTML = '';

			} else { continue; }		
		}


		var eArr = new Array();

		xdiv = document.createElement('div');
		xdiv.setAttribute('id', 'xhr_div');
		xdiv.innerHTML = source;
		var nodes = xdiv.childNodes.length;

		for (var i = 1; i <= nodes; i++) {
			
			if (!stuck[i]) {
			 
				var sid = 'sticky_holder_' + i;
				eArr.push(sid);
				$(sid).innerHTML = xdiv.childNodes[i-1].innerHTML;
				
				if (getCookie('anim') == 'on') {
					//alert('Hi');
					var qid = $(sid).childNodes[0].id;
					loadedStickies.push(qid);
				} else {	
					var qid = $(sid).childNodes[0].id;
					loadedStickies.push(qid);	
				}
			} else { continue; }		
		}

		setStatTime(xdiv.childNodes[nodes-1].innerHTML);
		if (getCookie('anim') != 'off' || getCookie('anim') == "") { var se = setTimeout('loadAnimation()', 500); }	
	}
	else {	
		loadedStickies = new Array();

		var eArr = new Array();

		xdiv = document.createElement('div');
		xdiv.setAttribute('id', 'xhr_div');
		xdiv.innerHTML = '';
		var nodes = 6;
		
		for (var i = 1; i <= 6; i++) {
			
				var sid = 'sticky_holder_' + i;
				if(i==2)
					$(sid).innerHTML = 'No Results found!';
				else	
					$(sid).innerHTML = '';
				//alert($(sid).innerHTML);
		}

		if (getCookie('anim') != 'off' || getCookie('anim') == "") { var se = setTimeout('loadAnimation()', 500); }	
	}

}


// Sets the slider status message

function setStatTime(html) {
	var xdiv = document.createElement('div');
	xdiv.innerHTML = html;
	
	//var tt = xdiv.getElementsByClassName("sticky_timeformat");
	var tt = xdiv.getElementsByTagName('p');
	
	var tmp = tt[0].innerHTML.split(' ');
	var dtmp = tmp[0];
	var ttmp = tmp[1];

	var dtmpa = dtmp.split('-');
	var m = dtmpa[1];
	var d = dtmpa[2];

	var ttmpa = ttmp.split(':');
	var hr = (ttmpa[0] > 12)?ttmpa[0]-12:ttmpa[0];
	var min = ttmpa[1];

	var ampm = (ttmpa[0] > 12)?'pm':'am';

	$('scale_date').innerHTML = m + '/' + d;
	$('scale_time').innerHTML = hr + ':' + min + ' ' + ampm;

}






/* Stuck Stickies */

var stuckStickies = new Array();


/* Position of the slider - used for the slider navigation */
var slider_pos = 0;

/* Fetch new results using the slider nav*/

function slideNav(v) {

	Effect.Appear('div_loading', {duration:.3});

	clearAnimations();

	//if (current_page == v) { return; }
	var url = '/questions/'+filter_type+'/'+v+':'+sort_by;


/*
	// Reset the scrollbar before loading the result -- dont do this cos the scrollbar is set on first query itself
	new Ajax.Request(url, {
	  method: 'post',
	  parameters: 'req=count',
	  onSuccess: function(xhr) {
			adjustScrollbar(xhr.responseText);
		}
	});
*/

	// Main XHR call

	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(xhr) {
			Effect.Fade('div_loading', {duration:.3});
			renderStickies(xhr.responseText);
		}
	});
	locateScaleStat();
}


function locateScaleStat() {
	$('scale_stat').style.left = (parseInt($('scale_pointer').style.left) - 80) + 'px';
}



/* Event Handlers */

function mouseOver(e) {
	var t = (e.target)?e.target.id:e.srcElement.id;
	if (t == 'sp_mid') { Effect.Appear('scale_stat', { duration: 0 }); }	
}

function mouseOut(e) {
	var t = (e.target)?e.target.id:e.srcElement.id;
	//if (t == 'sp_mid') { Effect.DropOut('scale_stat', { duration: 0.3 }); }
	if (t == 'sp_mid') { Effect.BlindUp('scale_stat', { duration: 0.3 }); }
}

function mouseDown(e) {
	var t = (e.target)?e.target.id:e.srcElement.id;
	if (t == 'sp_mid') { 
		sp_down = true;
		//Effect.Fade('scale_stat', { duration: 0.3 });
	}
}

function mouseUp(e) {
	var t = (e.target)?e.target.id:e.srcElement.id;
	if (t == 'search_button') { prepareSearch(); }
}


function keyUp(e) {
	var t = (e.target)?e.target.id:e.srcElement.id;
	if ((t == 'input_tb1') && (e.keyCode == 13)) { prepareSearch(); }
}

function prepareSearch() {
	search_string = $('input_tb1').value;
	search(search_string, 0);
}


function prepareNav() {
	if (display_mode == 'default') { slideNav(sbScroll.page); }
	else {
		var qstr = $('input_tb1').value;
		search(qstr, sbScroll.page);
	} 
}

/* div holders with stuck stickies */

var stuck = new Array();
stuck[1] = false;
stuck[2] = false;
stuck[3] = false;
stuck[4] = false;
stuck[5] = false;
stuck[6] = false;


/* Object-based classes for Static-type Objects*/

Sticky = {

	stick:function(o) {

		var color = getColor(o);
		var q = getqID(o);

/*
		var t = 'tape_' + q;
		Effect.toggle(t,'appear', { duration: 0.3 });
*/
		var s = 'stk_'+q+'_'+color;
		var src = $(s).src;
		var tmp = src.split('/');

		var b0 = 'stk-'+color+'-0.png';

		if (tmp[tmp.length-1] == b0) {

			$(s).src = 'images/stk-'+color+'-1.png';
			var opid = getHolderId(o);
			var osid = getStickyHolderId(opid);
			var tmp = osid.split('_');
			var id= tmp[2];
			stuck[id] = true;

		}
		else {

			$(s).src = 'images/stk-'+color+'-0.png';
			var opid = getHolderId(o);
			var osid = getStickyHolderId(opid);
			var tmp = osid.split('_');
			var id= tmp[2];
			stuck[id] = false;
		}

	},
	remove:function(o) {

		/*
		var q = getqID(o);
		var t = 'tape_' + q;
		Effect.Fade(t);
		*/

	},
	animation:function(o) {
		if ((getCookie('anim') == "") || (getCookie('anim') == 'on')) {
			setCookie('anim', 'off', 256);
			o.src = 'images/anim0.png';
		}
		else {
			setCookie('anim', 'on', 256);
			o.src = 'images/anim1.png';
		}
	}
};



/* Returns the question ID for objects suffixed with _question ID*/
function getqID(oid) {
	var t = oid.split('_');
	return t[t.length-2];
}


/* Returns the color of the sticky */
function getColor(oid) {
	var t = oid.split('_');
	return t[t.length-1];
}

/* Returns the div holder of the sticky */
function getHolderId(oid) {
	var o = $(oid);
	var opid = o.parentNode.parentNode.parentNode.parentNode.id;
	return opid;
}

/* Returns the stickty holder id from the sticky id */
function getStickyHolderId(oid) {
	var o = $(oid);
	var opid = o.parentNode.id;
	return opid;
}


/* Form validation*/

function validateForm(name) {

	if (name == 'ask') {
		var valid = false;

		if (valid) {
		
		}
		else { 
			//alert(questionForm.question.value);
		}		
		$('questionForm').submit();

	}

	if (name == 'reg') {

		if ($F('reg_username') == '' ) {
			$('reg_username_err').childNodes[1].className = 'clr-red';
			$('reg_username_err').childNodes[1].innerHTML = 'Please select a username';
			return false;
		} else { $('reg_username_err').childNodes[1].innerHTML = ''; }
		
		if ($F('reg_passwd') == '' ) {
			$('reg_passwd_err').childNodes[1].className = 'clr-red';
			$('reg_passwd_err').childNodes[1].innerHTML = 'Please enter a password';
			return false;
		}

		if ($F('reg_passwd') != $F('reg_passwdc')) {
			$('reg_passwd_err').childNodes[1].className = 'clr-red';
			$('reg_passwd_err').childNodes[1].innerHTML = 'Passwords don\'t match';
			return false;
		}
		else { $('regForm').submit(); }
	}


}

var navSlider;
var navVals = new Array();

sbScroll = new Object(); // Will store the info about scroll navigator
sbScroll.len = 972;
sbScroll.newcall = true;
sbScroll.page = 1;

/* Adjust the scrollbar size and sensitivity */
// res == number of results
function adjustScrollbar(res) {

		if (res <= 6) { $('div_scale').style.visibility = 'hidden'; }

		else {

			if (sbScroll.newcall) {

				sbScroll.total = Math.ceil(res/6); // Number of pages
				sbScroll.unit = Math.ceil(sbScroll.len/sbScroll.total); // Individual unit length for each page
				sbScroll.offset = sbScroll.unit; // For scroller length
				sbScroll.end = sbScroll.len - sbScroll.offset; // Position of the scroller for the last unit

/*
				alert('len: '+len+"\n" +
					'total: '+total+"\n" +
					'unit: '+unit+"\n" +
					'offset: '+offset+"\n" +
					'end: '+end+"\n"			
				);
*/

				sbScroll.navVals = new Array();

				for (var i = 0; i < sbScroll.total; i++) {
					if (i == 0) { sbScroll.navVals.push(8); }
					else if (i == sbScroll.total-1) { sbScroll.navVals.push(sbScroll.end-20); }
					else { sbScroll.navVals.push((i*sbScroll.unit)-30); }
				}

			//alert(navVals);

				navSlider = new Control.Slider(
					'scale_pointer',
					'div_scale',
					{
						range:$R(0, sbScroll.len),
						values:sbScroll.navVals,
						onSlide:function(v){ sliderMove(v);},
						onChange:function(v){ prepareNav();}
					}
				);


				$('div_scale').style.visibility = 'visible';
				$('sp_mid').style.width = (30+sbScroll.offset)+'px';
				$('sp_right').style.marginLeft = (37+sbScroll.offset) + 'px';
				$('scale_pointer').style.width = (15+37+sbScroll.offset)+'px';

				sbScroll.newcall = false;

			}

	}

}


/* Navigate using clicks */

function clickNav(e) {

	var offset = $('div_scale').offsetLeft + 12;
	var xpos = e.clientX;
	var cpos = xpos - offset;
	var l = Math.floor(cpos/sbScroll.unit);

/*
	alert(offset +':'+ xpos +':'+ cpos +':'+ l);
	alert(sbScroll.navVals[l-1]);
*/


	if (l == sbScroll.navVals.length-1) { $('scale_pointer').style.left = (sbScroll.navVals[sbScroll.navVals.length-1] - 27) +'px'; }
	else { $('scale_pointer').style.left = sbScroll.navVals[l]+'px'; }

	sbScroll.page = l;
	
	slideNav(sbScroll.page);
}



/** Cookie functions **/

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return "";
}

function delCookie(name) { createCookie(name,"",-1); }