$(document).ready(function(){
	$.extend($.validator.messages, {
		required: "Required field"
	});
	
	$("#lnkLogin").click(function (e) {
		e.preventDefault();
		if ($("#divLogged").css("display")!="block"){
			$("#divAccess").fadeToggle('slow');
		}
	});
	
	$("#frmLogin").validate({ 
		rules: { 
			user: {required:true}, 
			password: {required:true}
		}, 
		messages: { 
			user: {required: "Enter a username"}, 
			password: {required: "Enter a password"} 
		}, 
		errorPlacement: function(error, element) { 
			error.appendTo($("#errorMsg").empty()); 
		}, 
		submitHandler: function(form) {
			login(); 
		}
	}); 
	
	$("#password").keypress(function (e) {  
		if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {  
			$("#frmLogin").submit();  
			return false;  
		} else {  
			return true;  
		}  
	});  
	
	if ($("#btnClose").length) {
		$("#btnClose").click(function() {
			window.location.href="./close.php";
		});
	}

	if ($("#template-editor").length) {
		$("#frmTemplate").validate({
			rules: { 
				name: { 
					remote: "check-template-name.php" 
				}
			},
			messages: { 
				name: { 
					remote: jQuery.format("{0} is already in use")
				}
			}, 
			errorPlacement: function(error, element) { 
				error.appendTo($("#errorTemplateMsg").empty()); 
			}, 
			submitHandler: function(form) {
				saveTemplate();
			}
		});
	
		getAllTemplates();
		
		$("#template").change(function() {
			var index = $("#template").val();
			if (index !="") getTemplate($("#template").val());
		});
	}

	if ($("#client-panel").length) {
		$("#frmSearch").validate({ 
			rules: { 
				dateFrom: {date:true}, 
				dateTo: {date:true},
				ageFrom: {number:true}, 
				ageTo: {number:true},
			}, 
			messages: { 
				dateFrom: {date: "Enter a valid date"}, 
				dateTo: {required: "Enter a valid date"},
				ageFrom: {number:"Enter a valid age"}, 
				ageTo: {number:"Enter a valid age"},
			}, 
			errorPlacement: function(error, element) { 
				error.appendTo(element.parent()); 
			}, 
			submitHandler: function(form) {
				getClientSearch();
			}
		}); 

		getAllProductsClient();
	}
	
	if ($("#admin-panel").length) {	
		$("#frmSearch").validate({ 
			rules: { 
				dateFrom: {date:true}, 
				dateTo: {date:true}
			}, 
			messages: { 
				dateFrom: {date: "Enter a valid date"}, 
				dateTo: {required: "Enter a valid date"}
			}, 
			errorPlacement: function(error, element) { 
				error.appendTo(element.parent()); 
			}, 
			submitHandler: function(form) {
				getAdminSearch();
			}
		}); 
	
		getAllCompanies();
		
		$("#company").change(function() {
			var index = $("#company").val();
			if (index !="") getAllProductsCompany($("#company").val());
		});
	}
	
	if ($("#order-panel").length) {
		getAllDataTemplates();
	}
	
	if ($("#btnSearch").length) {	
		$("#companyOn").change(function(){
			if ($(this).is(':checked')) {
				$("#company").removeAttr("disabled");
			}
			else {
				$("#company").attr("disabled", "disabled");

			}
		});
		
		$("#productOn").change(function(){
			if ($(this).is(':checked')) {
				$("#product").removeAttr("disabled");
			}
			else {
				$("#product").attr("disabled", "disabled");

			}
		});
		
		$("#dateOn").change(function(){
			if ($(this).is(':checked')) {
				$("#dateFrom,#dateTo").removeAttr("disabled");
			}
			else {
				$("#dateFrom,#dateTo").attr("disabled", "disabled");

			}
		});
		
		$("#ageOn").change(function(){
			if ($(this).is(':checked')) {
				$("#ageFrom,#ageTo").removeAttr("disabled");
			}
			else {
				$("#ageFrom,#ageTo").attr("disabled", "disabled");

			}
		});
		
		$("#titleOn").change(function(){
			if ($(this).is(':checked')) {
				$("#title").removeAttr("disabled");
			}
			else {
				$("#title").attr("disabled", "disabled");

			}
		});
	}
	$("a.banner").colorbox({width:"100%", height:"100%", iframe:true});
	$(".wrapper").easySlider({prevId: 'arrow_left',	nextId: 'arrow_right'});
	
	$(".wrapper ul li div a").tipsy({fade: true});

});

jQuery.fn.fadeToggle = function(speed, easing, callback) {
	return this.animate({opacity: 'toggle'}, speed, easing, callback);  
};

function closeForm(){
	$.fn.colorbox.close();
} 

function refreshTableSearch(){
	$("#tbdata tbody tr").hover(function() {
			$(this).addClass("highlight");
		},
		function(){
			$(this).removeClass("highlight");
		}
	);
}

function refreshButtonOrderPanel(){
	$("input[type=button][id^=btnUpdate]").click(function() {
		var id = $(this).parent().prev().attr("id");		
		setNextTemplate(id.substring(11),$(this).parent().prev().val());		
	});
}

function refreshSelectTemplateEditor(){
	$("select[id^=image]").change(function() {
		var index = $(this).val();
		if (index !="") $('#frameTmp').contents().find('#div'+$(this).attr("id")+' img').attr("src",$(this).val());			
	});
}

function refreshFrameTemplateEditor(){
	$("input[type=text]").change(function() {
		$('#frameTmp').contents().find('#div'+$(this).attr("id")).html($(this).val());
	});
}

function getParams(){
	var result="";
	$.each($("select:enabled,input[type=text]:enabled,textarea:enabled"), function(i,item){
		if ($(this).val() != "") {
			item.id+"-"+$(item).val();
			result+="&"+item.id+"="+$(item).val();
		}
	});
	return result;
}

function createTable(id,data){
	var table = $("<table id='tbdata'></table>");
	var thead = $("<thead></thead>");
	var trhead = $("<tr></tr>");
	var tbody = $("<tbody></tbody>");
	
	$.each(data, function(i,items){
		var trbody = $("<tr></tr>");		
		$.each(items, function(key,value){
			if (i==0) trhead.append(("<th>"+key+"</th>"));
			trbody.append($("<td>"+value+"</td>"));
		});
		tbody.append(trbody);
	});
	table.append(thead.append(trhead));
	table.append(tbody);
	$("#"+id).empty().append(table);
}

function getAllTemplates() {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=1",
		processData: false,
		success:
			function(data){
				$("#template").empty().append("<option value=''>[Select a template]</option>");
				$.each(data, function(i,item){
					var opt = $("<option value='"+item.id+"'>"+item.name+"</option>");
					$("#template").append(opt);
				});
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getTemplate(id) {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=2&id="+id,
		processData: false,
		success:
			function(data){
				$("input:hidden").remove();
				if ($("#tempData")) $("#tempData").remove();
				var ul = $("<ul id='tempData'></ul>");
				ul.append($("<li></li>").append($("<label for='name'>Name</label>")).append($("<input type='text' name='name' id='name' class='required input'/>")));
				ul.append($("<li></li>").append($("<p id='errorTemplateMsg'></p>")));
				var first = true;
				$.each(data[0], function(key,value){					
					if (value!=0) {						
						var li = $("<li></li>");						
						var label = $("<label for='"+key+"'>"+key+"</label>");
						var type = "hidden";
						if (key.indexOf("image")!=-1){
							type = "file";
							var input = $("<select name='"+key+"' id='"+key+"' class='required select'></select>");	
							input.append($("<option value=''>[Select an image]</option>"));
						}
						else
						if (value>0){
							type = "text";
							var input = $("<input type='text' name='"+key+"' id='"+key+"' class='required input' maxlength='1000'/>");
						}
						
						if (type == "hidden") {
							var input = $("<input type='hidden' name='"+key+"' id='"+key+"' value='"+value+"'/>");
							$("#divBoxTemplate").append(input);
						}
						else {
							if (first) {li.addClass("clr");first = false;}
							li.append(label);
							li.append(input);
							ul.append(li);
						}
					}
				});				
				$("#frmTemplate ul").after(ul);
				$("#liUploadify").show();
				$("#divSave").css({"display" :"block"}).animate({"opacity" :"1"}, "slow"); 
				$('#frameTmp').attr('src', $("#page").val());
				$('#divFrameBottom').fadeIn();
				getUploadedImages();
				refreshFrameTemplateEditor();
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getUploadedImages() {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=3",
		processData: false,
		success:
			function(data){
				$("select[id^=image]").empty().append("<option value=''>[Select an image]</option>");
				$.each(data, function(i,item){
					var opt = $("<option value='"+item.link+"'>"+item.name+"</option>");
					$("select[id^=image]").append(opt);
				});
				refreshSelectTemplateEditor();
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function saveTemplate() {
	var params = getParams();
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=4"+params,
		processData: false,
		success:
			function(data){
				if (data) {
					alert("Saved");
				}
				else {
					alert("Error in saving!");
				}
				window.location.reload();
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getClientSearch() {
	var params = getParams();
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=5"+params,
		processData: false,
		success:
			function(data){
				createTable("divBoxTable",data);
				refreshTableSearch();
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getAdminSearch() {
	var params = getParams();
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=6"+params,
		processData: false,
		success:
			function(data){
				createTable("divBoxTable",data);
				refreshTableSearch();
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getAllCompanies() {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=7",
		processData: false,
		success:
			function(data){
				$("#company").empty().append("<option value=''>[ALL]</option>");
				$.each(data, function(i,item){
					var opt = $("<option value='"+item.id+"'>"+item.name+"</option>");
					$("#company").append(opt);
				});
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getAllProductsClient() {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=8",
		processData: false,
		success:
			function(data){
				$("#product").empty().append("<option value=''>[ALL]</option>");
				$.each(data, function(i,item){
					var opt = $("<option value='"+item.id+"'>"+item.name+"</option>");
					$("#product").append(opt);
				});
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getAllProductsCompany(company) {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=9&company="+company,
		processData: false,
		success:
			function(data){
				$("#product").empty().append("<option value=''>[ALL]</option>");
				$.each(data, function(i,item){
					var opt = $("<option value='"+item.id+"'>"+item.name+"</option>");
					$("#product").append(opt);
				});
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function login() {
	var user = $("#user").val();
	var password = $("#password").val();
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=10&user="+user+"&password="+password,
		processData: false,
		success:
			function(data){
				if (data.length==0){					
					$("#errorMsg").html("Invalid user or password");
					$("#errorMsg").fadeIn("slow");
				}
				else{
					var options = $("<div id='divOptions'></div>");
					$.each(data.options, function(key,value){
						if (key != "Home") options.append(" | ");
						options.append($("<a href='"+value+"'>"+key+"</a>"));
					});
					$("#welcomeMsg").html("Welcome <b>"+data.user+"</b> ("+data.surname+", "+data.firstname+")").after(options);
					$("#divAccess").fadeOut("slow",function(){($("#divLogged").fadeIn("slow"))});
				}
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function getAllDataTemplates() {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=11",
		processData: false,
		success:
			function(data){
				var ul = $("<ul></ul>");
				var auxSelect = $("<select></select>").append($("<option value=''>[Select next template]</option>"));
				var auxNext = new Array();
				$.each(data, function(i,item){
					var li = $("<li></li>");
					var label = $("<label for='sltTemplate"+item.id+"' class='dbl'>"+item.name+"</label>");
					var select = $("<select id='sltTemplate"+item.id+"' name='slt"+item.id+"' class='select'></select>");
					var opt = $("<option value='"+item.id+"'>"+item.name+"</option>");
					var span = $("<span class='sbutton'></span>");
					var button = $("<input type='button' id='btnUpdate"+item.id+"' value='Update' class='button'/>");
					auxNext[auxNext.length] = item.next;
					auxSelect.append(opt);
					ul.append(li.append(label).append(select).append(span.append(button)));
				});
				$("#frmOrder").append(ul);
				$("select[id^=sltTemplate]").each(function(i){
					auxSelect.children().clone().appendTo(this);
					$(this).val(auxNext[i]);
				});
				refreshButtonOrderPanel();
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}

function setNextTemplate(template1,template2) {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "controller.php",
		data: "p=12&template1="+template1+"&template2="+template2,
		processData: false,
		success:
			function(data){
				if (data) {
					alert("Saved");
				}
				else {
					alert("Error in saving!");
				}
			},
		error:
			function(){
				alert("System Error!, please try again later please");
			}
	});
}