function Products() {
	///
	this.datasetOBJ = new AjaxPlace({});
	this.datasetOBJ.serverParams.args = [];
	this.datasetOBJ.folder = "admin/";
    ///
	this.initialize = function(){
		var idCat = this.getButtons("cat");
		///this.getButtons("pac");
		if(App.coursepreloaded!=""){
		   this.getProductsById(App.coursepreloaded); 
		   App.coursepreloaded = "";
		   return;
		}
		if(idCat > 0)
			this.getProductsByCat(idCat);
    }
	this.getProductsById = function(id){
	    this.datasetOBJ.serverParams.clas = "LSCourse";
		this.datasetOBJ.serverParams.func = "getData";
		this.datasetOBJ.serverParams.args = [id];
		this.getPage(1);
		///
		//this.showLegend($("btCat_"+id).innerHTML);
	}
	this.getButtons = function(cual){
		var ap = new AjaxPlace({clas:(cual == "cat") ? "LSCategories" : "LSPackage", func:"getDataAsigned"});
		ap.folder = "admin/";
		var ret;
		var callback = function(transport){
			var r = eval(transport.responseText);
			ret = this.fillButtons($((cual == "cat") ? "menu_categories" : "menu_packages"), eval(transport.responseText), (cual == "cat") ? "getProductsByCat" : "getProductsByPack" );
		}
		ap.call({asynchronous:false, onSuccess:callback.bind(this) });
		return ret;
	}
	this.fillButtons = function(container, dataObj, func){
		var r = dataObj;
		var str = '<table width="190px" cellpadding="0" cellspacing="0" style="margin-left:20px; margin-top:5px;">';
		var style = "";
		var idButton = (container == $("menu_categories"))?"btCat_":"btPack_";
		for(var t =0; t < r.length;t++){
			style = (t == r.length-1) ? 'style="border:none;"' : style;
			str += '<tr><td class="button" ' + style + '><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="15px"><img src="images/menu_button.gif"/></td><td><a id="'+(idButton + r[t].id)+'" href="#" onclick="App.section.'+func+'('+r[t].id+');return false;">' + r[t].name + '</a></td></tr></table></td></tr>'
		}
		str += "</table>"; 
		container.innerHTML = (r.length > 0) ? str : "No data.";
		return (r.length > 0) ? r[0].id : 0;
	}
	this.getProductsByCat = function(id){
		this.datasetOBJ.serverParams.clas = "LSCourse";
		this.datasetOBJ.serverParams.func = "getDataAsigned";
		this.datasetOBJ.serverParams.args = [id];
		this.getPage(1);
		///
		this.showLegend($("btCat_"+id).innerHTML);
	}
	this.search = function(){
		var str = $("searchField").value;
		if( Functions.trim(str) == "")
			return
		////
		////
		this.showLegend("Search results for phrase - "+str);
		this.datasetOBJ.serverParams.clas = "LSCourse";
		this.datasetOBJ.serverParams.func = "getDataByString";
		this.datasetOBJ.serverParams.args = [str];
		this.getPage(1);
	}
	this.showLegend = function(str){
		$("legend").innerHTML = str;	
	}
	this.getProductsByPack = function(id){
		this.showLegend($("btPack_"+id).innerHTML);
		this.drawPages(1,1);
		///
		this.datasetOBJ.serverParams.clas = "LSPackage";
		this.datasetOBJ.serverParams.func = "getData";
		this.datasetOBJ.serverParams.args=[id];
		///
		var callback = function(transport){
			///alert(transport.responseText);
			var r = eval(transport.responseText);
			this.showPackage(r)
		}
		this.datasetOBJ.call({ onSuccess:callback.bind(this) });
	}
	
	this.showProducts = function(data){
		var str = "";
		var myTemplate = new Template('<div class="product"><div class="background#{even}"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="150px" align="center" valign="top"><img border="0" class="img" src="#{image}" width="100" height="100" /></td><td valign="top"><span class="title">#{title}</span><br /><span class="description"><br style=" font-size:5px;"/>#{description}<span><br /><br style=" font-size:5px;"/><span class="description">Price: <span class="title">USD $#{price}. </span> #{suscription_time} days.  #{suscription}.#{addons}<a href="#" onclick="App.section.addCourseToCart(#{id}); return false;"><img border="0" src="images/buy.jpg" /></a><span style="margin-left:15px;"><a href="#" onclick="App.section.showDetail(#{id});return false;">More details</a> #{openvideo}</span></span><div style="display:none;" id="details_#{id}" class="long_text" ><br/>#{description_long}</div></td></tr></table></div></div>');
		for (var t=0; t<data.length;t++){
			///
			data[t].image = (data[t].image == "") ? "images/no_image.jpg" : "admin/files/"+data[t].image;
			data[t].openvideo = (data[t].preview == "")? "": '<a style="margin-left:10px;" href="#" onclick="App.section.previewVideo(\'admin/files/'+data[t].preview+'\'); return false;">Show a Preview</a>';
			data[t].suscription = (data[t].id_suscription_type == "1")?"One time membership":"Recurrent membership"; 
			data[t].even = ( ((t+1)%2) == 0 ) ? "1" : "0";
			data[t].description = Functions.replace(data[t].description, '\\n', '<br/>');
			data[t].description_long = Functions.replace( data[t].description_long, '\\n', '<br/>');
			//
			var req = [];
			var opt = [];
			var addons_str = "";
			for(var j=0; j<data[t].addons.length; j++){
				if(data[t].addons[j].required == "Y"){
					req.push( data[t].addons[j] );
				}else{
					opt.push( data[t].addons[j] );
				}
			}
			var func = function(arr){
				var s_local = "";
				for(var i=0; i<arr.length; i++){
					if(i>0){
						s_local += "<br/>";
					}					
					s_local += "Price: <span class=\"title\">USD $" + arr[i].price + "</span> - " + arr[i].name + "<br/>" + arr[i].description;
				}
				return s_local;
			}
			var s = func(req);
			if(s != ""){
				if(addons_str != "")
					addons_str += "<br/>";
				addons_str +=  "<span style=\"font-weight:bold;\">Required</span><br/>" + s;
			}
			var s2 = func(opt);
			if(s2 != ""){
				if(addons_str != "")
					addons_str += "<br/>";
				addons_str += "<span style=\"font-weight:bold;\">Optional</span><br/>" + s2;
			}
			if(addons_str != ""){
				addons_str = "<hr color=\"#E8E8E8\" size=\"1\"/>" + addons_str;
			}
			data[t].addons = addons_str + "<br/>";
			str += myTemplate.evaluate( data[t] );
		}
		$("product_list").innerHTML =  str ;
	}
	this.showPackage = function(obj){
		var str = "";
		var packData = new Template('<div class="product"><div class="package"><span class="title">#{name}</span><br /><span class="description"><br style=" font-size:5px;"/>#{description}<span><br /><br style=" font-size:5px;"/><span class="description">Price: <span class="title">USD $#{price}</span> #{suscription_time} days.  #{suscription}.<br/><a href="#" onclick="App.section.addPackageToCart(#{id}); return false;"><img border="0" src="images/buy.jpg" /></a></span><br/><br/>Courses included:<br/><br/></div></div>');
		obj[0][0].suscription = (obj[0][0].id_suscription_type == "1")?"One time membership":"Recurrent membership"; 
		obj[0][0].description = Functions.replace(obj[0][0].description, '\\n', '<br/>');
		str += packData.evaluate( obj[0][0] );
		var myTemplate = new Template('<div class="product"><div class="background#{even}"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="150px" align="center" valign="top"><img border="0" class="img" src="#{image}" width="80" height="90" /></td><td valign="top"><span class="title">#{name}</span><br /><span class="description"><br style=" font-size:5px;"/>#{description}</span><br /><br style=" font-size:5px;"/><a href="#" onclick="App.section.showDetail(#{id});return false;">More details</a> #{openvideo}<div style="display: none;" id="details_#{id}" class="long_text" ><br/>#{description_long}</div></td></tr></table></div></div>');
		var data = obj[1];
		for (var t=0; t<data.length;t++){
			if(data[t].asigned == "0")
				continue;
			data[t].even = ( ((t+1)%2) == 0 ) ? "1" : "0";
			data[t].image = (data[t].image == "") ? "images/no_image.jpg" : "admin/files/"+data[t].image;
			///data[t].openvideo = (data[t].preview == "")? "": "App.section.previewVideo('admin/files/"+data[t].preview+"');";
			data[t].openvideo = (data[t].preview == "")? "": '<a href="#" onclick="App.section.previewVideo(\'admin/files/'+data[t].preview+'\'); return false;">Show a Preview</a>';
			data[t].description = Functions.replace(data[t].description, '\\n', '<br/>');
			data[t].description_long = Functions.replace( data[t].description_long, '\\n', '<br/>');
			str += myTemplate.evaluate( data[t] );
		}
		$("product_list").innerHTML = str;
	}
	////
	////pagination
	this.showDetail = function(id){
		Effect.toggle("details_"+id, 'blind');
	}
	this.addCourseToCart = function(id){
		App.shopppingCart.addCourse(id);
	}
	this.addPackageToCart = function(id){
		App.shopppingCart.addPackage(id);
	}
	this.getPage = function( num ){
		this.datasetOBJ.serverParams.args[1] = num;
		$("product_list").innerHTML = "";
		var callback = function(transport){
			///alert(transport.responseText);
			var r = eval(transport.responseText);
			if(r.length > 0){
			    this.drawPages(num, r[0].pages);
				this.showProducts(r);
			}else{
				this.drawPages(1, 1);
				$("product_list").innerHTML = "No results found."
			}
			
		}
		this.datasetOBJ.call({ onSuccess:callback.bind(this) }, false);
	}
	this.drawPages = function(actual, total){
		var str = "";
		if(total > 1){
			str += '<table border="0" cellspacing="0" cellpadding="0"><tr>';
			if(actual > 1){
				str += '<td width="70" align="left"><a href="#" onclick="App.section.getPage('+(actual-1)+'); return false;">&lt;&lt;previous</a></td>';
			}else{
				str += '<td width="70" align="left">&lt;&lt;previous</td>';
			}
			str += '<td width="35">Page:</td>';
			var amount = 9;
			var t = 1;
			if(total>amount){
				t = ((actual-Math.ceil(amount/2)) < 1) ? t : actual - Math.floor(amount/2);
				t = ((t+amount)>total) ? t-(t+amount-total)+1 : t;
			} 
			var st = t;
			while( t <(st+amount) && t<= total){
				var num = (t!=actual)?'<a href="#" onclick="App.section.getPage('+t+'); return false;">'+t+'</a>' : t;
				str += ' <td align="center" style="padding-left:5px; padding-right:5px;">'+num+'</td>';
				t++;	
			} 
			if(actual < total){
				str += '<td width="50" align="right"><a href="#" onclick="App.section.getPage('+(actual+1)+'); return false;">next&gt;&gt;</a></td>';
			}else{
				str += '<td width="50" align="right">next&gt;&gt;</td>';
			}
			str += '</tr></table>';
		}
		$('pages').innerHTML = str;
	}
	this.previewVideo = function(video){
		var putit = function(){
			var so = new SWFObject("swf/player_flv_maxi.swf", "swf_video", 320, 240, "8");
			so.addVariable("flv", "../"+video);
			so.addVariable("width", "320");
			so.addVariable("height", "240");
			so.addVariable("autoplay", "1");
			so.addVariable("loop", "1");
			so.write("flvplayer");
		}
		Modalbox.show('<div align="center" id="flvplayer" style="height:245px;"></div>', {afterLoad: putit ,title: "Preview Video", width: 340} );
		///alert(video);
	}
}



