/**
 * AS4Channel Component
 */
 
$j = jQuery.noConflict();

// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
// Document-load events

document.observe('dom:loaded', function() 
{
	// If we are not a lightbox!
	if($('resource_manager'))
		AS4ResourceManager.getInstance().refresh();

	// If an all resources part exists
	if($('all_resources'))
	{
		AS4AllResourcesPart.getInstance().channelController = AS4Channel.getInstance();
		AS4AllResourcesPart.getInstance().element = $('all_resources');

		AS4FormMethods.applyPlaceholders(null, $A([$('pagination_search_terms')]));
	}
	
	//log('strShowIScreen:' + AS4Channel.getInstance().strShowIScreen);
	
	if(AS4Channel.getInstance().strShowIScreen != "")
	{
		
		AS4Channel.getInstance().installIIcons();
	}
	
},null);


// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
// Class declaration

var AS4Channel = Class.create({
	
	/**
	 * @type {integer} The id of the currently loaded channel or folder
	 */
	channelId: null,

	
	/**
	* Array of channel widget ids to show i icon in
	**/
	
	strShowIScreen: "",
	
	/**
	setting a perpage attribute
	**/
	
	perPage: "",
	
	keys: null,
	
	form_data: null,
	
	current_cwid: null,
	
	// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

	/**
	 * @constructor
	 */
	initialize: function() 
	{},
		

	// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
	// AJAX methods
	
	/**
	 * Begins an AJAX request for the given resource to be injected into the element content container
	 * 
	 * @param integer id Id of the resource to be loaded inline
	 * @param Element element The element into which the resource will be injected
	 */
	loadInlineResource: function(id, element)
	{
		var url = '/resources/view';
		
		var params = {
			id: id,
			inline: 'true'
		};
		
		AS4Shell.getInstance().ajaxUpdate(url, params, element, null);
	},
	
	/**
	 * Begins an AJAX request for the given resource to be injected into the element content container
	 * as HTML text. I.e. use the urlFor method.
	 * 
	 * Options may be:
	 * 
	 * scaling: true|false	- if true when rendering a media item, the image will be scaled to a width of 150px
	 * embed: true|false	- if true, the returned data will be wrapped in HTML tags.
	 * 
	 * @param {integer} id Id of the resource to be loaded inline
	 * @param {Object} options Hash of options as above
	 * @param {Element} element The element into which the resource will be injected
	 */
	urlForResource: function(id, options, element)
	{
		var url = '/resources/urlFor';
		
		var params = {
			id: id,
			inline: 'true',
			scaling: ( options.scaling ? options.scaling : false),
			embed: (options.embed ? options.embed : false)
		};
		
		AS4Shell.getInstance().ajaxUpdate(url, params, element, null);
	},

	/**
	 * @depracated - use Element.insertSWFObject
	 */
	insertFlashMovie: function(UFO,websiteDomain,resourceId,element)
	{	
			var resourceUrl = escape(websiteDomain+"/resources/view/id/"+resourceId+".flv");
		
			var FO = {
				movie:"/app/common/assets/flash/flvplayer.swf",
				width: "620",
				height: "400",
				majorversion:"7",
				build:"0",
				bgcolor:"#FFFFFF",
				flashvars:"file="+resourceUrl
			};

			UFO.create( FO, "player"+resourceId);
	},

	/**
	 * Set the specified resource's approval status
	 */
	setApproval: function(resourceId)
	{
		var url = '/channel/set_resource_approval';
		
		var params = {
			resource_id: resourceId
		};
		
		AS4Shell.getInstance().ajaxUpdate(url, params, null, $A([this.onSetApprovalComplete.bind(this)]));
	},
	
	/**
	 * Callback updates the approval status based on database result
	 */
	onSetApprovalComplete: function(transport, target)
	{
		if(!transport.headerJSON)
			return;
		this.approvalReload();
	},
			/**
	 * Create a new folder from the information in the create_folder_panel
	 */
	approvalReload: function()
	{
		// this will refresh the panel eventually
		// Redirect to the upload form
		top.location = self.location;
		
	},
	
	installIIcons: function()
	{		
			strShowIScreen = AS4Channel.getInstance().strShowIScreen;			
						
			arrShowIScreen = strShowIScreen.split("|");
			

			if(arrShowIScreen.length > 0)
			{
				//console.log($j(arrShowIScreen));
				arrShowIScreen.each(function(cwid, i)
				{
					if(cwid != "")
					{
						imageElement = $j("#channel_widgets_"+cwid+" img");
						
						$j.each($j("#channel_widgets_"+cwid+" img"), function(j, image)
						{
							image.id = "iScreenImage_"+cwid+"_"+j;
							
							thisImage = $j("#iScreenImage_"+cwid+"_"+j);							
							
							//we only want to add the icon to images that are actually resources
							if(thisImage.attr("src").indexOf("/resources/view/id/") != "-1")
							{	
								// now we need to isolate the image id
								
								hostname = window.location.hostname;
								imgSrc = thisImage.attr("src");
								imageId = imgSrc.replace("http://", "");
								
								imageId = imageId.replace(hostname, "");
								imageId = imageId.replace("?inline=true", "");
								imageId = imageId.replace("/resources/view/id/", "");
								imageId = imageId.replace(":81", "");
								imageId = imageId.replace(":82", "");
															
								var url = '/resources/get_image_summary';
						
								var params = {
									resource_id: imageId
								};
								
							//	AS4Shell.getInstance().ajaxUpdate(url, params, null, $A([AS4Channel.getInstance().onImageSummaryRetrieved.bind(this)]), null);
								$j.ajax({
								   type: "GET",
								   url: url,
								   data: "resource_id="+imageId,
								   success: function(text){
								     if(text != "")
								     {
									   // $j("#iScreenImage_"+cwid+"_"+j).load(function()
									  //  {
									     	imagePosition = $j("#iScreenImage_"+cwid+"_"+j).position();
									     	imageWidth = $j("#iScreenImage_"+cwid+"_"+j).width();
									     	imageHeight = $j("#iScreenImage_"+cwid+"_"+j).height(); 
	
									     	//imageIIcon = "<div style='height:0px;position:relative;z-index:8;'><div class='i-icon hiddenicon' id='i-icon"+cwid+"-"+j+"' style='width:"+((imageWidth/100)*80)+"px;position:relative;z-index:10;'><div class='image_summary_text' id='image_summary_text_"+cwid+"_"+j+"'  style='visibillity:hidden;'>"+text+"</div></div><div class='clear' >&nbsp;</div></div><div style='height:0px;float:left;width:"+imageWidth+"px'class='i-icon-button'><img id='i-icon-button-"+cwid+"-"+j+"'  style='float:right;cursor:pointer;width:14px;height:14px;'  src='/app/common/assets/themes/PEW/css/images/PEW-icons_information.gif' alt='Click for Info' onclick='AS4Channel.getInstance().toggleSummary("+j+","+cwid+");'/></div><div class='clear'>&nbsp;</div>";
											imageIIcon = "<div style='height:0px;position:relative;z-index:8;'><div class='i-icon hiddenicon' id='i-icon"+cwid+"-"+j+"' style='width:"+((imageWidth/100)*95)+"px;position:relative;z-index:10;'><div class='image_summary_text' id='image_summary_text_"+cwid+"_"+j+"'  style='visibillity:hidden;'>"+text+"</div></div><div class='clear' >&nbsp;</div></div><div style='height:0px;float:left;width:"+imageWidth+"px'class='i-icon-button'><img id='i-icon-button-"+cwid+"-"+j+"'  style='float:right;cursor:pointer;width:14px;height:14px;'  src='/app/common/assets/themes/default/css/images/icons_information.gif' alt='Click for Info' onclick='AS4Channel.getInstance().toggleSummary("+j+","+cwid+"); return false;'/></div><div class='clear'>&nbsp;</div>";
											
									     	$j("#iScreenImage_"+cwid+"_"+j).after(imageIIcon);
									     	
									     	popup = $j("#i-icon"+cwid+"-"+j);
									     	popupheight = $j("#i-icon"+cwid+"-"+j).height();
									     	
									     	
									     	
									    	$j(".primary #i-icon"+cwid+"-"+j).css("bottom", 80);
									    	$j(".secondary #i-icon"+cwid+"-"+j).css("bottom", 100);
									    	$j(".tertiary #i-icon"+cwid+"-"+j).css("bottom", 95);
									     	$j("#i-icon"+cwid+"-"+j).css("left", (imageWidth/100)*3);
									     	
									     	//	$j("#i-icon"+cwid+"-"+j+" img").css("margin-top", popupheight);
							     		//});	
								     }
								   }
								 });
								
								
							}
						});
						
										
						
					}
				});
			}
	}, 
	
	toggleSummary: function(j , cwid, imgId) 
	{
		icontop = $j("#i-icon"+cwid+"-"+j).css("top");
		
		icontop = icontop.replace("px", "");
		
		if($j("#i-icon"+cwid+"-"+j).hasClass("hiddenicon"))
		{
			$j("#i-icon"+cwid+"-"+j).removeClass("hiddenicon");
			
			//$j("#i-icon-button-"+cwid+"-"+j).attr("src", "/app/common/assets/themes/PEW/css/images/PEW-icons_close.gif");
			$j("#i-icon-button-"+cwid+"-"+j).attr("src", "/app/common/assets/themes/default/css/images/icons_close.gif");
			
			
		//	icondisplacement = icontop - $j("#i-icon"+cwid+"-"+j).height();
		//	$j("#i-icon"+cwid+"-"+j).css("top", icondisplacement);
		//	$j("#i-icon"+cwid+"-"+j).css("top", "-40px");
			
		}
		else
		{
			$j("#i-icon"+cwid+"-"+j).addClass("hiddenicon");
			
			//$j("#i-icon-button-"+cwid+"-"+j).attr("src", "/app/common/assets/themes/PEW/css/images/PEW-icons_information.gif");
			$j("#i-icon-button-"+cwid+"-"+j).attr("src", "/app/common/assets/themes/default/css/images/icons_information.gif"); 
						
			//$j("#i-icon"+cwid+"-"+j).css("top", "-40px");
			
			// $j("#i-icon"+cwid+"-"+j).css("top", icontop+40);
		}
		
		
		
	//$j("#image_summary_text_"+cwid+"_"+j).toggle();
	},
	
	loadTranslationDetails: function(resource_id, channel_id, cwid, res_no)
	{
		var url = '/resources/load_translation_details';
		
		var params = {
			id: resource_id,
			channel_id: channel_id,
			cwid: cwid,
			res_no: res_no
		};
		
		AS4Shell.getInstance().ajaxUpdate(url, params, null, $A([this.onLoadTranslationDetailsComplete.bind(this)]), {showIndicator: false});
	},
	
	onLoadTranslationDetailsComplete: function(transport, target)
	{
		cwid = transport.headerJSON.cwid;
		resNo = transport.headerJSON.res_no;
		categories = transport.headerJSON.categories;
		title = transport.headerJSON.title;
		summary = transport.headerJSON.summary;
		type = transport.headerJSON.type;
		publish_date = transport.headerJSON.publish_date;
		contact = transport.headerJSON.contact;
		create_date = transport.headerJSON.create_date;
		owner = transport.headerJSON.owner;
		translation_id = transport.headerJSON.translation_id;
		
		
		$j("#channel_widgets_"+cwid+" #resource"+resNo+" .top_row span.resource_type").html(categories);
		
		//if we return a file type then we want to open the file directly
		if(type == 5)
			$j("#channel_widgets_"+cwid+" #resource"+resNo+" .header_row").html("<a href='/resources/view/id/"+translation_id+"?download=true' title='"+title+"'>"+title+"</a>");
		else
			$j("#channel_widgets_"+cwid+" #resource"+resNo+" .header_row").html("<a href='/channel/view_resource/id/"+translation_id+"'>"+title+"</a>");
			
		$j("#channel_widgets_"+cwid+" #resource"+resNo+" .summary_row").html(summary);
		$j("#channel_widgets_"+cwid+" #resource"+resNo+" .last_row .owner").html(owner);
		$j("#channel_widgets_"+cwid+" #resource"+resNo+" .last_row .contact").html('Contact: '+contact);
		$j("#channel_widgets_"+cwid+" #resource"+resNo+" .last_row #pub_date").html(publish_date);
		$j("#channel_widgets_"+cwid+" #resource"+resNo+" .last_row #create_date").html(create_date);	
	},
	
	filterFormRecords: function(cwid, layout, all)
	{
		var search_filter = $j("#search_filter_"+cwid);
		var search_fields = $j("#search_fields_"+cwid);
		var display_language = $j("#language_filter_"+cwid);
		
		var url = "/widget/index/";
		
		if(all === true)
		{
			var params = {
				renderMode: 'update',
				resource_id: this.resourceId,
				search_filter: null,
				search_field: 0,
				channel_widgets_id: cwid,
				id: this.channelId,
				display_language: display_language.val()
			};
		}
		else
		{
			var params = {
				renderMode: 'update',
				resource_id: this.resourceId,
				search_filter: search_filter.val(),
				search_field: search_fields.val(),
				channel_widgets_id: cwid,
				id: this.channelId,
				display_language: display_language.val()
			};
		}
		
		AS4Shell.getInstance().ajaxUpdate(url, params,  $('form_widget_'+cwid), $A(), {method: 'get'});
	},
	
	filterFormRecords2: function(cwid, layout)
	{
		var search_filter = $j("#channel_widgets_"+cwid+" .form_search #search_filter");
		var search_fields = $j("#channel_widgets_"+cwid+" .form_search #search_fields");
		
		var field_value = search_fields.val();
		var filter_value = search_filter.val();
		
		if(filter_value == "")
		{
			alert("No search filter set");
			
			return false;
		}
		
		/* 
		we need to use different methods to filter dependent 
		on which form the records are being layed out in.
		*/
		
		switch(layout)
		{
			case 'linear':
				
				var form_records = $j("#channel_widgets_"+cwid+" .form_records_linear table#values tbody tr");
				
				form_records.hide("fast");
				
				var record_count = 0;
				
				form_records.each(function(i, ele)
				{
					var form_record = jQuery(ele);
					
					if(field_value == "0")
					{
						var arr_form_value = form_record.children("td");
						
						arr_form_value.each(function(j, field)
						{
							var record_value = $j(field).children("span").html();
							
							if(record_value.indexOf(filter_value) != "-1")
							{
								record_count++;
								
								form_record.show("fast");
							}
						});
					}
					else
					{
						var arr_form_value = form_record.children("td#form_field_"+field_value+"");
						
						var record_value = arr_form_value.children("span").html();
						
						if(record_value.indexOf(filter_value) != "-1")
						{
							record_count++
							
							form_record.show("fast");
						}
					}
				});
			break;
			case 'record':
				var form_records = $j("#channel_widgets_"+cwid+" .form_records_grid .form_record");
				
				var record_count = 0;
				
				form_records.fadeOut("fast");
				
				form_records.each(function(i, ele)
				{
					
					
					
					var form_record = jQuery("#"+ele.id+" .central");

					

					if(field_value == "0")
					{
						var arr_form_value = form_record.children(".form_field");
						
						arr_form_value.each(function(j, field)
						{
							var record_value = $j("#"+field.id+" span").html();
							//console.log(record_value);
							//console.log(filter_value);
							if(record_value.indexOf(filter_value) != "-1")
							{
								record_count++;
								
								form_record.parent().fadeIn("fast");
							}
						});
					}
					else
					{
						var arr_form_value = form_record.children("#form_field_"+field_value);

						var record_value = arr_form_value.children("span").html();
						
						if(record_value.indexOf(filter_value) != "-1")
						{
							record_count++;
							
							form_record.fadeIn("fast");
						}
					}
					
				});
			break;
		}
		
		jQuery(".form_record_count span").html(record_count);
		
	},
	
	/**
	function to send a form
	**/
	
	submitForm: function(form_id, cwid)
	{		
		var pageForm = $j("#channel_widgets_"+cwid+" #form_"+form_id);
		
		var form_data = '{"captcha_confirm":';
		
		if($j("#humancheck_"+cwid).val() != "notanautomaton")
		{
				return false;
		}
		else
		{
			entered_captcha = "bypass";
			captcha_element_id = "0";
		}

		//retrive the captcha value entered so it can be put at the start on the json string
		if($j("#captcha_confirm_"+cwid).length > 0)
		{
			entered_captcha = $j("#captcha_confirm_"+cwid).val();
			
			captcha_element_id = $j("#captcha_confirm_"+cwid).siblings(".captcha_image").attr("id").replace("captcha_image_", "");
		}
		else
		{
			entered_captcha = "bypass";
			captcha_element_id = "0";
			
			
		}
		
		
		
		jQuery('.ajax_status .ajax_message').html('Sending Form');
		jQuery('.ajax_status').show();
		//$j("#form_form_element_698").css("opacity","0.3");
		
			
		//return false;	
		form_data += '"'+entered_captcha+'",';
		
		
		// loop througb all inputs textarea and select boxes and build a form data json string
		
		$j("#channel_widgets_"+cwid+" #form_"+form_id+" input").each(function(i, ele)
		{
			
			if(ele.id != "captcha_confirm" && ele.type != 'button' && ele.type != "reset" && ele.type != "checkbox")// ignore the capcha because we already have it also ignore button values
			{
				// strip out 'form_form_element_' so we just have a numeric id
				form_data += '"'+ele.id.replace("form_form_element_input_", "")+'":'+JSON.stringify(ele.value)+','; 
			}
			
			//if we have a checkbox then we only want to send the value if it is ticked
			if(ele.type == "checkbox" && ele.checked)
			{
				form_data += '"'+ele.id.replace("form_form_element_input_", "")+'":'+JSON.stringify(ele.value)+','; 
			}
				
					
		});
		
		// we need to get the innerhtml of a text area so we do things slightly differently
		$j("#channel_widgets_"+cwid+" #form_"+form_id+" textarea").each(function(i, ele)
		{
					
			// strip out 'form_form_element_' so we just have a numeric id
			form_data += '"'+ele.id.replace("form_form_element_input_", "")+'":'+JSON.stringify(ele.value)+','; 
		});
		
		// we need to get the value of a select box so we do things slightly differently
		$j("#channel_widgets_"+cwid+" #form_"+form_id+" select").each(function(i, ele)
		{
			selectedValue = $j("#"+ele.id).val();		

			// strip out 'form_form_element_' so we just have a numeric id
			form_data += '"'+ele.id.replace("form_form_element_input_", "")+'":'+JSON.stringify(selectedValue)+','; 
		});

		var session = $j("#session_"+cwid).val();
		var secure_domain = $j("#secure_domain_"+cwid).val();
		
		var strLen = form_data.length;
				
	
		
		form_data = form_data.slice(0,strLen-1); 
		
		form_data += "}";
		
		AS4Channel.getInstance().setFormDataToBeSent(form_data);
		
		// encrypt the form data
		
		AS4Channel.getInstance().current_cwid = cwid;
		
		$j.jCryption.getKeys("/channel/get_keys/generateKeypair/true", function(receivedKeys)
		{
			AS4Channel.getInstance().setEncryptionKeys(receivedKeys);
			//AS4Channel.getInstance().keys = receivedKeys;
					
			$j.jCryption.encrypt(AS4Channel.getInstance().form_data,AS4Channel.getInstance().keys,function(encrypted) {
				encrypted_data = encrypted;
				
				var params = {
					form_id: form_id,
					form_data: encrypted_data, // needs to be encrypted for validation
					captcha_element_id: captcha_element_id,
					channel_widgets_id: AS4Channel.getInstance().current_cwid,
					session: session,
					validation: "true"
				};
		
				var url = "/channel/save_form_record";
		
				AS4Shell.getInstance().ajaxUpdate(url, params, $('form_constructor'), $A([AS4Channel.getInstance().onPageFormSent.bind(AS4Channel.getInstance(), form_id)]), {message: 'Sending Form...', method:"post"});
				
				jQuery('.ajax_status .ajax_message').html('Loading');
				jQuery('.ajax_status').hide();
				$j("#form_form_element_698").css("opacity","1");
				
			});
		});
		//var url = secure_domain+"/secure/save_form_record";
		//var url = "/secure/save_form_record";
		
		/*$j.ajax({
		  url: url,
		  data: params,
          dataType: 'json',
		  success: function(data) 
		  {
		  	alert(data);
		  }
		});
		
		$j.getJSON(url, function(data) {
		  alert(data);
		});*/

	},
	
	onPageFormSent: function(form_id, transport)
	{
		var errMsg = "";
		/* 
		check to see if we have a successful submission
		if not then highlight the fields that failed validation
		*/
		var cwid = transport.headerJSON.channel_widgets_id;
		var widget_name = transport.headerJSON.widget_name;
		
		$j("#form_widget_"+cwid+" .form_errors").html("");
		
		if(transport.headerJSON.result == "success")
		{
			$j("#form_"+form_id).submit();
		}
		else if(transport.headerJSON.result == "failed_captcha")
		{
			field = transport.headerJSON.field;
			msg = transport.headerJSON.error;
			//$j("#form_widget_"+cwid+" .form_form_element label").css("color", "#555555");
			//$j("#form_widget_"+cwid+" .form_form_element").css("border", "none");
			//$j("#form_widget_"+cwid+" .form_errors").html("");
			//$j("#form_widget_"+cwid+"  .captcha_error").html("");
			
		//	$j("#form_widget_"+cwid+" #form_form_element_"+field+" ").css("border", "1px dashed red");
		//	$j("#form_widget_"+cwid+"  .captcha_error").html("<p style='color:red'><strong>"+msg+"</strong></p>");
			
			$j("#"+widget_name+"_widget_"+cwid+" .form_form_element label").css("color", "#555555");
			$j("#"+widget_name+"_widget_"+cwid+" .form_form_element").css("border", "none");
			$j("#"+widget_name+"_widget_"+cwid+" .form_errors").html("");
			$j("#"+widget_name+"_widget_"+cwid+"  .captcha_error").html("");
			
		//	$j("#form_widget_"+cwid+" #form_form_element_"+field+" ").css("border", "1px dashed red");
		//	$j("#form_widget_"+cwid+"  .captcha_error").html("<p style='color:red'><strong>"+msg+"</strong></p>");
			
			$j("#"+widget_name+"_widget_"+cwid+" #form_form_element_"+field+" ").css("border", "1px dashed red");
			$j("#"+widget_name+"_widget_"+cwid+"  .captcha_error").html("<p style='color:red'><strong>"+msg+"</strong></p>");
			
			
			
			
			var imgSrc = $j("#form_widget_"+cwid+"  #captcha_image_"+field).attr("src");
			var d = new Date();
			
			$j("#form_widget_"+cwid+"  #captcha_image_"+field).attr("src", imgSrc+"?"+d);
			
		}
		else if(transport.headerJSON.result == "failed_email")
		{
			field = transport.headerJSON.field;
			errMsg = transport.headerJSON.error;
			
			
			$j("#"+widget_name+"_widget_"+cwid+" .form_form_element label").css("color", "#555555");
			$j("#"+widget_name+"_widget_"+cwid+" .form_form_element").css("border", "none");
			$j("#"+widget_name+"_widget_"+cwid+" .captcha_error").html("");
			
			$j("#"+widget_name+"_widget_"+cwid+" #form_form_element_"+field+" label").css("color", "#FF0000");
			$j("#"+widget_name+"_widget_"+cwid+" #form_form_element_"+field).css("border", "1px dashed #FF0000");
		
			$j("#"+widget_name+"_widget_"+cwid+" .form_errors").html("<p style='color:red'><strong>"+errMsg+"</strong></p>");
			
		}
		else if(transport.headerJSON.result == "failed")
		{
			
			//$j("#form_widget_"+cwid+" .form_form_element label").css("color", "#555555");
			//$j("#form_widget_"+cwid+" .form_form_element").css("border", "none");
		//	$j("#form_widget_"+cwid+" .captcha_error").html("");
			
			$j("#"+widget_name+"_widget_"+cwid+" .form_form_element label").css("color", "#555555");
			$j("#"+widget_name+"_widget_"+cwid+" .form_form_element").css("border", "none");
			$j("#"+widget_name+"_widget_"+cwid+" .captcha_error").html("");
			
			transport.headerJSON.errors.each(function(err, i)
			{
				errMsg += err+"<br />";
							
			});
			
				
			transport.headerJSON.fields.each(function(id, i)
			{
				$j("#"+widget_name+"_widget_"+cwid+" #form_form_element_"+id+" label").css("color", "#FF0000");
				$j("#"+widget_name+"_widget_"+cwid+" #form_form_element_"+id).css("border", "1px dashed #FF0000");
			});
			
			//$j("#form_widget_"+cwid+" .form_errors").html("<p style='color:red'><strong>"+errMsg+"</strong></p>");
			$j("#"+widget_name+"_widget_"+cwid+" .form_errors").html("<p style='color:red'><strong>"+errMsg+"</strong></p>");
			//alert(errMsg);
			
		}
		
	},
	
	initialiseForm: function(form_id, cwid)
	{
		var form = $j("#channel_widgets_"+cwid+" #form_"+form_id);
		var form_content = $j("#channel_widgets_"+cwid+" #form_content_"+form_id);
		var channel_widget = $j("#channel_widgets_"+cwid);
		var column = $j("#channel_widgets_"+cwid).parent();
		
		if(form)
		{
			var form_form_elements = form.children(".form_form_element");
			var channel_widget_padding_left = channel_widget.css("padding-left");
			var channel_widget_padding_right = channel_widget.css("padding-right");
			var padding = (channel_widget_padding_left.replace("px", "")*1)+(channel_widget_padding_right.replace("px", "")*1);
			/*loop through each form form elements checking the width of each.
			if the width of the element exceeds the width of the channwl widget then
			resize it so it fits
			*/
			
			form_form_elements.each(function(i, ele)
			{
				current_element = $j("#channel_widgets_"+cwid+" #form_"+form_id+" #"+ele.id);
				
				if(current_element.width() > channel_widget.width())
				{
					current_element.css("width", channel_widget.width()-20);
				}
			});
			
			form_content.css("position", "static");
			form_content.css("margin", "0px");
			
			form_content.css("width", column.width()-padding);
		}
		
		
	},
	
	refreshFormRecords: function(page)
	{
		var options = Object.extend({
				limit: 3
			}, options
		);

		cwid = this.channelWidgetsId;
		
		var search_filter = $j("#search_filter_"+cwid);
		var search_fields = $j("#search_fields_"+cwid);
		var display_language = $j("#language_filter_"+cwid);
		
		var url = '/widget/index/';

		var params = {
			renderMode: 'update',
			channel_widgets_id: this.channelWidgetsId,
			page: page,
			limit: options.limit,
			search_terms: this.searchTerms,
			per_page: this.perPage,
			search_filter: search_filter.val(),
			search_field: search_fields.val()
		};

		//console.log(AS4Channel.getInstance());
		AS4Shell.getInstance().ajaxUpdate(url, params, $('form_widget_'+this.channelWidgetsId), null, {showIndicator: false});
	},
	
	refreshFormRecords1: function(page)
	{
		cwid = this.channelWidgetsId;
		
		var search_filter = $j("#search_filter_"+cwid);
		var search_fields = $j("#search_fields_"+cwid);
		var display_language = $j("#language_filter_"+cwid);
		
		var url = "/widget/index/";
		
		
			var params = {
				renderMode: 'update',
				resource_id: this.resourceId,
				search_filter: search_filter.val(),
				search_field: search_fields.val(),
				channel_widgets_id: cwid,
				id: this.channelId,
				display_language: display_language.val(),
				page: page,
				per_page: this.perPage
			};
		
		
		AS4Shell.getInstance().ajaxUpdate(url, params,  $('form_widget_'+cwid), $A(), {method: 'get'});
	},
	

	formRecordPagination: function(cwid, perPage, showNewest, page)
	{
		
		
		var record_list = $j("#form_records_list_"+cwid);
		var records = $j("#form_records_list_"+cwid+" .form_record");
		
		var pages = Math.ceil(records.size() / perPage);
		
		var page_start = (perPage*page)-perPage ;
		var page_end = (perPage*page)-1 ;
		
		var next_page = page + 1;
		var prev_page = page - 1;
		records.each(function(record_position, ele)
		{
			record = $j("#"+ele.id);
			
			record.fadeIn("fast");
			
			if(record_position < page_start || record_position > page_end)
			{
				record.fadeOut("fast");
			}
			
		});
		
		var pagination_container = $j("#record_pagination_"+cwid);
		
		var page_links = "";
		
		if(page > "1")
		{
			page_links += '<a href="javascript:void(0);" onclick="AS4Channel.getInstance().formRecordPagination('+cwid+', '+perPage+', 10,1)" id="record_page_link_first_'+cwid+'">First</a>';
			page_links += '<a href="javascript:void(0);" onclick="AS4Channel.getInstance().formRecordPagination('+cwid+', '+perPage+', 10, '+prev_page+' )"  id="record_page_link_prev_'+cwid+'">Prev</a>';
		}
		
		for(i=1 ; i<=pages ; i++)
		{
			page_links += '<a href="javascript:void(0);" onclick="AS4Channel.getInstance().formRecordPagination('+cwid+',  '+perPage+',  10,'+i+')" id="record_page_link_'+i+'_'+cwid+'">'+i+'</a>';
		}
				
		if(page < pages)
		{
			page_links += '<a href="javascript:void(0);" onclick="AS4Channel.getInstance().formRecordPagination('+cwid+',  '+perPage+', 10,'+next_page+')" id="record_page_link_next_'+cwid+'">Next</a>';
			page_links += '<a href="javascript:void(0);" onclick="AS4Channel.getInstance().formRecordPagination('+cwid+',  '+perPage+', 10,'+page+')" id="record_page_link_last_'+cwid+'">Last</a>';
		}
		
		
		pagination_container.html(page_links);
		
	},
	
	setEncryptionKeys: function(keys)
	{
		AS4Channel.getInstance().keys = keys;
	},
	
	setFormDataToBeSent: function(form_data)
	{
		AS4Channel.getInstance().form_data = form_data;
	}
		
	
	
	
	
});


// # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
// Static Methods & Properties

// Static instance of the AS4Channel object
AS4Channel.instance = null;

/**
 * Return a singleton instance of the AS4Channel object
 * @return AS4Channel
 */
AS4Channel.getInstance = function()
{
	if(!AS4Channel.instance)
		AS4Channel.instance = new AS4Channel();
		
	return AS4Channel.instance;
}


 

