var bbcProdList=new Object();
//1) HTML to show while requested page is being fetched:
bbcProdList.loadstatustext="<div style=\"height:200px;text-align:center;padding-top:120px;\"><img src='"+_URL+"modules/store/js/loading.gif' /></div>";

//2) Bust cache when fetching pages?
bbcProdList.maxPage = 12;
bbcProdList.ajaxbustcache = false;

bbcProdList.createXmlHttpRequestObject = function(){
	var xmlHttp;
	if (window.XMLHttpRequest){ // if Mozilla, IE7, Safari etc
		xmlHttp = new XMLHttpRequest();
	}else if (window.ActiveXObject){ // if IE6 or below
		try{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				xmlHttp = false;
			}
		}
	}else{
		xmlHttp = false;
	}
	return xmlHttp;
}

bbcProdList.connect=function(pagenumb, pageurl, divId){
	var page_request = false;
	var bustcacheparameter="";
	page_request = this.createXmlHttpRequestObject();
	page_request.onreadystatechange=function(){bbcProdList.loadpage(page_request, divId);}
	page_request.open('GET', pageurl+'?ajax=1&page='+pagenumb, true);
	page_request.send(null);
}

bbcProdList.loadpage=function(page_request, divId){
	document.getElementById(divId).innerHTML=this.loadstatustext; //Display "fetching page message"
	if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
		document.getElementById(divId).innerHTML=page_request.responseText;
	}
}

bbcProdList.bindpages=function(pageinfo, divId, paginateIds){ //Main Constructor function
	this.pageinfo	=	pageinfo; //store object containing URLs of pages to fetch, selected page number etc
	this.totProd	= parseInt(pageinfo.page[1]);
	this.disp			= parseInt(pageinfo.page[2]);
	this.allPage 	= parseInt(this.totProd/this.disp);
	this.allPage	+=((this.totProd % this.disp) > 0) ? 1 : 0;
	this.divId		= divId;
	this.paginateIds=paginateIds; //array of ids corresponding to the pagination DIVs defined for this pageinstance
	var initialpage=(pageinfo.selectedpage < this.allPage)? pageinfo.selectedpage : 0; //set initial page shown
	this.selectpage(initialpage);
}

bbcProdList.selProd = function(obj){
	xmlHttp = this.createXmlHttpRequestObject();
	// akan diproses hanya bila obyek tidak sibuk 
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
	{
		xmlHttp.open("GET", sel_url+obj.value, true);
		xmlHttp.onreadystatechange = function(){
			if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
				xmlResponse = xmlHttp.responseXML;
				xmlDocumentElement = xmlResponse.documentElement;
				myResult = xmlDocumentElement.firstChild.nodeValue;
				if(myResult=='true'){
					obj.checked = true;
				}else{
					obj.checked = false;
				}
			}
		}
		xmlHttp.send(null);
	}else{
		alert("Please wait while the page is loading...!");
	}
}

bbcProdList.delProd = function(obj, divID){
	xmlHttp = this.createXmlHttpRequestObject();
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0)
	{
		xmlHttp.open("GET", sel_url+obj.value, true);
		xmlHttp.onreadystatechange = function(){
			if(xmlHttp.readyState == 4 && xmlHttp.status == 200){
				if(list_ajax) {
					var it = mypages;
					it.totProd -= 1;
					it.allPage 	= parseInt(it.totProd / it.disp);
					it.allPage	+=((it.totProd % it.disp) > 0) ? 1 : 0;
					if( it.pageinfo.selectedpage > 0) {
						it.pageinfo.selectedpage = (it.pageinfo.selectedpage == it.allPage) ?  (it.pageinfo.selectedpage-1) : it.pageinfo.selectedpage;
					}else{
						it.pageinfo.selectedpage = 0;
					}
					it.buildpagination(it.pageinfo.selectedpage, it.allPage);
					bbcProdList.connect(it.pageinfo.selectedpage, it.pageinfo.page[0], it.divId);
				} else {
						var div = document.getElementById(divID);
						div.style.display = 'none';
				}
			}
		}
		xmlHttp.send(null);
	}else{
		alert("Please wait while the page is loading...!");
	}
}

bbcProdList.bindpages.prototype={

	buildpagination:function(selectedpage, allPage){
		if (allPage <= 1){
			var paginateHTML=""; //Pagination HTML to show when there's only 1 page (no pagination needed)
		}else{
			var paginateHTML = this.pageNumber(selectedpage, allPage);
		}
		for (var i=0; i < this.paginateIds.length; i++){ //loop through # of pagination DIVs specified
			var paginatediv=document.getElementById(this.paginateIds[i]); //reference pagination DIV
			paginatediv._currentpage=selectedpage; //remember current page selected (which will become previous page selected after each page turn)
			paginatediv.innerHTML=paginateHTML;
			var pageinstance=this;
			paginatediv.onclick=function(e){
				var targetobj=window.event? window.event.srcElement : e.target;
				if (targetobj.tagName=="A" && targetobj.getAttribute("rel")!=""){
					if (!/disabled/i.test(targetobj.className)){ //if this pagination link isn't disabled (CSS classname "disabled")
						pageinstance.selectpage(parseInt(targetobj.getAttribute("rel")));
					}
				}
				return false;
			}
		}
	},

	selectpage:function(selectedpage, allPage){
		allPage = (allPage != null) ? allPage : this.allPage;
		this.pageinfo.selectedpage = selectedpage;
		this.buildpagination(selectedpage, allPage);
		bbcProdList.connect(selectedpage, this.pageinfo.page[0], this.divId);
	},

	refresh:function(pageinfo){
	this.pageinfo=pageinfo;
	var initialpage=(pageinfo.selectedpage<pageinfo.page[1])? pageinfo.selectedpage : 0;
	this.selectpage(initialpage);
	},

	pageNumber:function(selectedpage, allPage){
		var maxPage = bbcProdList.maxPage;
		var selectedpage = parseInt(selectedpage);
		this.selectedPage= selectedpage;
		var interVal= 3;
		if(allPage <= maxPage){
			istart = 0;
			iend		= allPage;
		}else{
			if(selectedpage < (maxPage-interVal)){
				istart = 0;
				iend		= maxPage;
			}else{
				istart = selectedpage-interVal;
				istart = ( istart<=0 ) ? 0 : istart;
				iend		= istart + maxPage;
				iend		= (iend > allPage) ? allPage : iend;
				istart = ((iend - maxPage) <= 0) ? istart : (iend - maxPage);
			}
		}
		var output = '<p style="text-align:left; display: inline;">';
		disable = (selectedpage==0) ? ' disabled' : '';
		output+='<p><a href="previous" rel="'+(selectedpage-1)+'" class="prevnext'+disable+'">«</a> </p>\n';
		for (var i=istart; i < iend; i++)
		{
			thisClass = (selectedpage==i) ? ' class="currentpage"' : '';
			output+='<p><a href="page-'+(i+1)+'" rel="'+i+'"'+thisClass+'>'+(i+1)+'</a></p>\n';
		}
		disable = (selectedpage==(allPage-1)) ? ' disabled' : '';
		output+='<p><a href="next" rel="'+(selectedpage+1)+'" class="prevnext'+disable+'">next »</a></p>\n';
		output+='</p>';
		if(allPage > maxPage)
		{
			thisPage = selectedpage + 1;
			var idDiv = 'bottom';
			output+=
				'<p style="text-align:right;display: inline;">'
			+		'Jump to <input name="page" class="pageGoInput" value="'+thisPage+'" id="pageBox'+idDiv
			+		'" onChange="mypages.checkValue(this);" onClick="this.select();" /> of '+allPage
			+	'</p>';
		}
		return output;
	},
	checkValue:function(field){
		selectedpage = parseInt(field.value);
		if(selectedpage <= this.allPage && selectedpage > 0){
			this.selectpage(selectedpage-1);
		}else{
			alert('please insert number of page between 1 to '+this.allPage);
			field.value = this.selectedPage + 1;
		}
	}
}
function store_order(obj) {
	$().ajaxStart(function() {
		$.facebox.loading();
	});
	$.ajax({
			type: 'POST'
		,	url	: $(obj).attr('action')
		,	data: $(obj).serialize()
		,	success: function(data) {
				$.facebox(data);
				$('#facebox .fot').hide();
			}
  });
  return false;
}
function money( number ) {
    var n = number;
    var prec	=	2;
    var dec_point	=	'.';
    var thousands_sep = ',';
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
    var abs = Math.abs(n).toFixed(prec);
    var _, i;
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
    return s;
}
function cart_update(i) {
	var c = cart_field('item', i);
	item = parseInt(c.value);
	if(item > 0) {
		c.value = item;
			j = parseInt(cart_field('cart_item').value);
			subtotal= cart_field('cart_subtotal');
			code		= parseFloat(cart_field('cart_code').value);
			total		= cart_field('cart_total');
			_sub = _total = 0;
			for(k=0;k < j;k++) {
				item	= parseInt(cart_field('item', k).value);
				price	= parseFloat(cart_field('price', k).value);
				amount= cart_field('amount', k);
				x = item*price;
				_sub += x;
				amount.innerHTML = money(x);
			}
			subtotal.innerHTML = money(_sub);
			total.innerHTML = money(_sub + code);
			return false;
	}else{
		t = cart_field('item', i);
		t.value = '1';
		cart_update(i);
	}
}
function cart_submit(task) {
	var obj = cart_field('cart_order');
	if(task == 'continue'){
		updated	= cart_field('cart_updated').value;
		if(updated == '1')	cart_save();
		else		$.facebox.close();
	}else{
		var inp = cart_field('cart_action');
		inp.value = task;
		obj.submit();
	}
	return false;
}
function cart_delete(id) {
	$.get(cart_del_url+id, function(data) { $.facebox(data) })
	return false;
}
function cart_save() {
	var obj = cart_field('cart_order');
	$.ajax({
			type: 'POST'
		,	url	: $(obj).attr('action')
		,	data: $(obj).serialize()
		,	success: function(data) {
			$.facebox.close();
			return false;
			}
  });
  return false;
}
function cart_change() {
	update	= cart_field('cart_updated');
	update.value = '1';
}
function cart_field(id, i) {
	if(i != null) d = id+'_'+i;
	else d = id;
	var out = document.getElementById(d);
	return out;
}
$(document).bind('close.facebox', function(){
	var d = document.getElementById('store_cart_quote');
	if(d != null){
		$('#store_cart_quote').load(cart_quote_url);
	}	
});