var cms_lists=new Array();

function debug(log_txt) {
    if (window.console != undefined) {
        console.log(log_txt);
    }
}

function updateOrder()
{
	//alert(Sortable.serialize('tbody_list'));
	var options = {
					method : 'post',
					postBody : 'section='+section+'&'+Sortable.serialize('items')
				  };

	//location.href='_lib/cms/_ajax/update_order.php?'+options['postBody'];
	new Ajax.Request('_lib/cms/_ajax/update_order.php', options);
}

function toggle_advanced(on)
{
	if( $('csv') ){
		$('csv').style.display="none"; 
	}

	var field=$('search_form');

	if( !on ){ 
		for (i = 0; i < field.length; i++){
			if( field[i].type!='hidden' && field[i].type!='submit' && field[i].type!='button' ){
				if( field[i].name!='s' ){
					field[i].disabled = true;
				}else{
					field[i].disabled = false;
				}
			}
		}
		
		Effect.toggle('advanced', 'blind');
		Effect.toggle('basic', 'appear');
	}else{ 
		for (i = 0; i < field.length; i++){
			if( field[i].type!='hidden' && field[i].type!='submit' && field[i].type!='button' ){
				if( field[i].name=='s' ){
					field[i].disabled = true;
				}else{
					field[i].disabled = false;
				}
			}
		}
		
		Effect.toggle('advanced', 'blind');
		Effect.toggle('basic', 'appear');
	}
}

function toggle_import()
{ 	
	if( $('advanced') ){
		$('advanced').style.display="none"; 
	}
	if( $('basic') ){
		$('basic').style.display="block"; 
	}
	
	Effect.toggle('csv', 'blind');	
}

function checkForm()
{
	var url = '/_lib/cms/_ajax/import.php';
	var pars = Form.serialize($('theForm'));
	
	showProgress();
		
	var myAjax = new Ajax.Request(
		url, 
		{
			method: 'post', 
			parameters: pars, 
			onComplete: function(result){
				//errors= new Array();
				//alert(result.responseText);
				var returned=result.responseText;
				
				debug(returned);
				
				o=returned.evalJSON();
			
				if( o.success ){
					alert(o.info);
					location.href=location.href;
				}else{
					//refresh page
					Ext.MessageBox.hide();					
					alert(returned);
				}
			}
		}
	);
			
	return false;
}

function remove_options(option)
{	
	//remove options
	for( i=option.options.length; i>0; i-- ){
		option.options[i]=null;
	}
	
	option.disabled=true;
	
	return true;
}

function add_options(originalRequest,target_option, value)
{
	result = originalRequest.responseText;

	models=eval('('+result+')');

	var mod=target_option;
	
	var selectedIndex=0;

	if( !models )
	{
		optval="";
		opttext="Not Applicable"
		mod.options[0]=new Option(opttext,optval, true,true);
	}else{
		for( i=0;i<models.length;i++ ){
			mod.options[i+1]=new Option(models[i],i, true,true);
			
			if( models[i].replace(/-/,'').toLowerCase()==value.replace(/-/,'').toLowerCase() ){
				selectedIndex=i+1;	
			}
		}
		
		mod.options[0].value=""
		mod.options[0].text=""
		mod.disabled=false;
	}
	mod.options.selectedIndex=selectedIndex;
}

function changeFile()
{
	$('csv_preview').innerHTML='';

	for( j in fields ){
		if( typeof(fields[j])=='string' ){
			remove_options($('field_'+fields[j]));
		}
	}
	
	$('csv_loaded').style.display='none';
	
	$('file_field').innerHTML=file_field_html;

	
	Event.observe('file','change',postForm);
}

var updater;
var upload;

var fN = function callBack(result) {
	updater.stop();
	Ext.MessageBox.hide();

	//alert(result.responseText);

	//open preview
	result=eval('('+result.responseText+')');
	
	if( result.error ){
		alert( result.error )
	}else{
		loadFile(result.file);
	}
}
var callback = { success:fN, upload:fN }

function showUploadProgress(){
	Ext.MessageBox.show({
		title: 'Please wait - Uploading',
		msg: 'Uploading..',
		progressText: 'Initializing...',
		width:400,
		progress:true,
		closable:false
	});
}

function updateUploadProgress(upload)
{
	Ext.MessageBox.updateProgress((upload.perc/100), upload.perc+'% completed');
	Ext.MessageBox.updateText(upload.status);
}

function checkUploadProgress() {
	var myAjax = new Ajax.Request(
		'/_lib/ajax/upload_progress.php', 
		{
			method: 'POST', 
			parameters: { 'uniq': $F['uniq'] }, 
			onComplete: function(result){
				if(result.responseText){
					upload=eval('(' + result.responseText + ')');
					updateUploadProgress(upload);
				}
			}
		});
}

function postForm()
{
	var target='/_lib/cms/_ajax/csv_upload.php';
	var formName=$('theForm');
	var up=1;

	showUploadProgress();
	updater = new PeriodicalExecuter(checkUploadProgress, 1);
	
	YAHOO.util.Connect.setForm(formName,up);
	YAHOO.util.Connect.asyncRequest('POST',target,callback);
}

function showProgress(){
	Ext.MessageBox.show({
		title: 'Please wait - Importing',
		msg: 'Importing..',
		progressText: 'Initializing...',
		width:400,
		progress:true,
		closable:false
	});
}

var file_field_html;

function loadFile(file)
{
	var url = '/_lib/cms/_ajax/csv_fields.php';
	var pars = 'csv='+file;
			
	var myAjax = new Ajax.Request(
		url, 
		{
			method: 'post', 
			parameters: pars, 
			onComplete: function(result){
				//errors= new Array();
				//alert(result.responseText);
				
				file_field_html=$('file_field').innerHTML;
				
				if( result.responseText=='null' ){
					alert('Error: can\'t read file. Try converting to CSV.');
					changeFile();
					return false;
				}
				
				
				var url = '/_lib/cms/_ajax/csv_preview.php';
				var pars = 'csv='+file;
				
				var myAjax = new Ajax.Updater(
					'csv_preview', 
					url, 
					{
						method: 'post', 
						parameters: pars
					});
				
				for( j in fields ){
					if( typeof(fields[j])=='string' ){
						remove_options($('field_'+fields[j]));
						add_options(result,$('field_'+fields[j]),fields[j]);
					}
				}
				$('csv_loaded').style.display='block';

				$('file_field').innerHTML='<strong>'+file+'</strong> <a href="#" onclick="changeFile();">change</a><input type="hidden" name="csv" value="'+file+'">';
				
			}
		}
	);
}

















function setRows(textarea)
{
	//var textarea = _gel("stickyText12");
	var cols = textarea.cols;
	var str = textarea.value;
	str = str.replace(/\r\n?/, "\n");
	var lines = 2;
	var chars = 0;
	for (i = 0; i < str.length; i++) {
		var c = str.charAt(i);
		chars++;
		if (c == "\n" || chars == cols) {
			lines ++;
			chars = 0;
		}
	}
	
	if( textarea.rows>lines ){
		lines=textarea.rows;	
	}
	
	//textarea.setAttribute("rows", lines);
	textarea.style.height = lines*14 + "px";
}

function initForms()
{
	var forms=$$('form.validate');
	
	forms.each(function(name, index) {		
		new formHandler(name, name.readAttribute('validateoptions') );
	});
}

function initAutoGrows()
{
	var tas=$$('textarea.autogrow');
	
	tas.each(function(name, index) {
		name.style.overflow = "hidden";
		name.style.fontSize = 12 + "px";
		setRows(name);
		
		Event.observe(name, 'keyup', function() { setRows(name) });
	});
}

function initComboBoxes()
{
	var fields=$$('select.combobox');
	
	fields.each(function(name, index) {
		new Ext.form.ComboBox({
			typeAhead: true,
			triggerAction: 'all',
			transform:name,
			width:350,
			forceSelection:true
		});
	});
}

function initDateFields()
{
	var inputs=$$('input.date');
	
	inputs.each(function(name, index) {
		new Ext.form.DateField({
			applyTo: name,
			format: 'd-m-Y',
			width: 100
		});
	});
}

function initTimeFields()
{
	var inputs=$$('input.time');
	
	inputs.each(function(name, index) {
		new Ext.form.TimeField({
			applyTo: name,
			format: 'h:i:s',
			width: 100
		});
	});
}

function initMaps()
{
	var inputs=$$('input.map');
	
	if( inputs.length==0 ){
		return;
	}
	
	google.load("maps", "3", {other_params: "sensor=false", "callback" : function(){
		var inputs=$$('input.map');
		
		inputs.each(function(name, index) {		
			div = document.createElement("div");
			div.style.width='600px';
			div.style.height='400px';
			
			name.parentNode.appendChild(div);
			
			var coords=null;
			
			if( name.value ){
				coords = name.value.split(',');
			}else{
				coords=[51.8100844,-0.02911359999995966];
			}
			
			var lat=coords[0];
			var lng=coords[1];
			
			var latlng = new google.maps.LatLng(lat, lng);
			var myOptions = {
				zoom: 15,
				center: latlng,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			}
			map = new google.maps.Map(div, myOptions);
			
			var marker = new google.maps.Marker({
				map: map,
				position: latlng,
				draggable:true
			});

			google.maps.event.addListener(marker, "dragend", function() {				
				var latlng=marker.getPosition();
				
				name.value=latlng.Ha+' '+latlng.Ia;
			});	
		});
	}});
}

function numbersonly(e){
	var unicode=e.charCode? e.charCode : e.keyCode
	
	if (unicode!=8 && unicode!=46 && unicode!=9){ //if the key isn't the backspace key or dot or tab (which we should allow)
		if (unicode<48||unicode>57){ //if not a number
			return false //disable key press
		}
	}
}
function addItem(aList,aField) {
	rows++;

	var ul = document.getElementById(aList);
	li = document.createElement("li");
	li.setAttribute('id', 'item-' + rows);
	
	var itemHTML='<input type="hidden" id="image'+rows+'" name="'+aField+'[]" value="" size="5"> ';
	itemHTML+='<img src="images/thumb.php?width=125&height=75&image=" id="image'+rows+'_thumb" /><br /> ';
	itemHTML+='<label id="image'+rows+'_label"></label> ';
	itemHTML+='<span class="link" onClick="phpUpload(\'image'+rows+'\')">Choose</span> ';
	itemHTML+='<span class="link" onClick="delItem(\'item-'+rows+'\')">Delete</span>';
	
	li.innerHTML=itemHTML;
	
	ul.appendChild(li); 
	
	Sortable.create(aField+'_files');
	
	phpUpload('image'+rows);
}

function delItem(aItem,aField) {
	rows--;
	
    var obj = document.getElementById(aItem);
    obj.parentNode.removeChild(obj);
	
	Sortable.create(aField+'_files');
}

function addFile(aList,aField) {
	rows++;

	var ul = document.getElementById(aList);
	li = document.createElement("li");
	li.setAttribute('id', 'item-' + rows);
	
	var itemHTML='<input type="file" name="'+aField+'[]" /> ';
	itemHTML+='<a href="javascript:;" onClick="delFile(\'item-'+rows+'\')">Delete</a>';
	
	li.innerHTML=itemHTML;
	
	ul.appendChild(li); 
	
	Sortable.create(aField+'_files');
	
	//phpUpload('image'+rows);
}

function delFile(aItem,aField) {
	rows--;
	
    var obj = document.getElementById(aItem);
    obj.parentNode.removeChild(obj);
	
	Sortable.create(aField+'_files');
}


function clearFile(field)
{
	var inputHidden = document.getElementById(field);
	inputFile = document.createElement("input");
	inputFile.setAttribute('name', field);
	inputFile.setAttribute('type', 'file');
	
	var cell=inputHidden.parentNode;
	
    while ( cell.childNodes.length >= 1 )
    {
        cell.removeChild( cell.firstChild );       
    } 
	
	cell.appendChild(inputFile);
}

function clearItem(aField) {
    var field = document.getElementById(aField);
	var thumb = document.getElementById(aField+'_thumb');
	var label = document.getElementById(aField+'_label');

	field.value='';
	thumb.src='_lib/phpupload/?func=preview&file=';
	label.innerHTML='';
}

function selectAll(field){
	$$('input').each(function(name, index) {		
		if( name.name==field+'[]' ){
			name.checked=true;
		}
	});
}

function selectNone(field){
	$$('input').each(function(name, index) {		
		if( name.name==field+'[]' ){
			name.checked=false;
		}
	});
}

function addRowrelated(aTable) {
	rows++;

	aRow = aTable.insertRow(aTable.rows.length);

	aCell = aRow.insertCell(0);
	aCell.innerHTML= '<select name="related[]" id="related'+rows+'"></select>					<!--<button type="button" onclick="choose_product(\'related'+rows+'\')">Choose</button>-->';
	
	aCell = aRow.insertCell(1);
	aCell.innerHTML= '<a href="javascript:;" onClick="delRow(this)">Delete</a>';
}

function delRow(row) {
	rows--;
	row.parentNode.parentNode.parentNode.deleteRow(row.parentNode.parentNode.rowIndex);
}


function phpUpload(field)
{
	var file;
	
	if( field ){
		file=document.getElementById(field).value;
	}
	
	window.open('_lib/phpupload/?field='+field+'&file='+file,'Insert','width=700,height=450,screenX=100,screenY=100,left=100,top=100,status,dependent,alwaysRaised,resizable,scrollbars')
}


_editor_url = "_lib/js/xinha-0.96.1/";

xinha_editors = null;
xinha_init    = null;
xinha_config  = null;
xinha_plugins = null;
custom_css=false;

// This contains the names of textareas we will make into Xinha editors
xinha_init = function()
{

	xinha_plugins = xinha_plugins ? xinha_plugins :
	[
		'Phpupload',
		'PasteText',
		'Linker',
		'Stylist',
		'TableOperations',
		'InsertAnchor'
	];
	// THIS BIT OF JAVASCRIPT LOADS THE PLUGINS, NO TOUCHING  :)
	if(!Xinha.loadPlugins(xinha_plugins, xinha_init)) return;

	xinha_editors = xinha_editors ? xinha_editors :
	[
		'copy'
	];

   xinha_config = xinha_config ? xinha_config : new Xinha.Config();
   
//	xinha_config.pageStyle = "@import url(/style/xinha.css);";
	
	xinha_config.toolbar = [
	["popupeditor"],
	[ "formatblock", "space",
	  "bold", "italic", "underline" ],
			
	[ "justifyleft", "justifycenter", "justifyright", "justifyfull", "separator",
	  "insertorderedlist", "insertunorderedlist","outdent","indent", "separator",
	  "forecolor", "hilitecolor", "separator",
	  'inserthorizontalrule', "createlink", 'insertimage', 'undo', 'redo', "killword", "htmlmode"
	   ]
	];
	
	xinha_config.Events.onGenerateOnce = function ()
	{
		setTimeout( function(){	
			var editor;
		
			editors.each(function(item) {
				var editor=item;
				
				if( $('language') ){
					if( $F('language')!=='en' ){
						editor=$F('language')+'_'+item;
					}
					

				}
				
				xinha_editors[editor].setEditorContent(xinha_content[editor]);
			} );
		 }, 100);
	}
	
	xinha_config.stripBaseHref=false;
	
	xinha_config.stripScripts=false;
	
	xinha_config.killWordOnPaste=true; //not supported by FF
	
	if( custom_css ){
		xinha_config.stylistLoadStylesheet('/css/cms.css');
	}


	xinha_editors   = Xinha.makeEditors(xinha_editors, xinha_config, xinha_plugins);
	
	// Xinha.startEditors(xinha_editors);
		
	editors.each(function(item) {
		xinha_editors[item].generate();
		generated_editors[item]=true;
	});
}

editors=new Array;
generated_editors=new Array;


function set_language()
{
	var option=$('language');

	for( j=0; j<option.options.length; j++ ){;
		if( $('language_'+option.options[j].value).style.display!='none' ){
			editors.each(function(item) {
				if( option.options[j].value=='en' ){
					xinha_editors[item].deactivateEditor();
				}else{
					xinha_editors[option.options[j].value+'_'+item].deactivateEditor();
				}
			});
			$('language_'+option.options[j].value).style.display='none';
		}
	}

	$('language_'+$F('language')).style.display='block';
	
	editors.each(function(item) {
		if( $F('language')=='en' ){
			xinha_editors[item].activateEditor();
		}else if(!generated_editors[$F('language')+'_'+item]){
			xinha_editors[$F('language')+'_'+item].generate();
			generated_editors[$F('language')+'_'+item]=true;
		}else{
			xinha_editors[$F('language')+'_'+item].activateEditor();
		}
	});
}

function init_tabs()
{
	var tabs=$$('.tab');
	
	tabs.each(function(name, index) {
		if( index==0 ){
			set_tab(name.target);
		}
					   
		name.observe('mousedown', function(e){ set_tab(e.target.target) });
	});
}

function set_tab(target)
{
	var tabs=$$('.tab');
	
	tabs.each(function(name, index) {
		if( target==name.target ){
			$(name.target).style.display='block';
			name.addClassName('current')
		}else{
			$(name.target).style.display='none';
			name.removeClassName('current')
		}
	});
}






var cms_list= Class.create({
	cms_list: null,
	select_all_row: null,
	clear_all_row: null,
	rows: null,
	select_all_pages: null,
	items: null,
	sortable: false,
	section: null,
	
	initialize: function(name) {
		this.form=$(name);
		
		//this.form.select('a[class="select_all"]')[0].observe('click', this.select_all.bindAsEventListener(this));
		//this.form.select('a[class="select_none"]')[0].observe('click', this.select_none.bindAsEventListener(this));
		
		this.form.select('input[class="toggle_select"]')[0].observe('change', this.toggle_select_all.bindAsEventListener(this));
		
		this.form.select('a[class="select_all_pages"]')[0].observe('click', this.select_all_pages.bindAsEventListener(this));
		this.form.select('a[class="clear_all_pages"]')[0].observe('click', this.select_none.bindAsEventListener(this));
		

		if( this.form.select('a[class="toggle_import"]')[0] ){
			this.form.select('a[class="toggle_import"]')[0].observe('click', toggle_import);
		}		
		
		this.select_all_row=this.form.select('tr[class="select_all_row"]')[0];
		
		this.clear_all_row=this.form.select('tr[class="clear_all_row"]')[0];
		this.select_all_pages=this.form.select('input[name="select_all_pages"]')[0];
		
		var checkboxes=this.form.select('input[name="items[]"]');
		
		for( i=0; i<checkboxes.length; i++ ){
			checkboxes[i].observe('click', this.select_row.bindAsEventListener(this));
		}
		
		var rows=this.form.select('tr[class="draggable row"]');	
		for( i=0; i<rows.length; i++ ){
			rows[i].observe('click', this.select_row.bindAsEventListener(this));
		}
		
		if (this.form.select('input[name="sortable"]')[0]) {
			this.sortable=true;			
			
			//this.items=this.form.select('tbody[class="items"]')[0];			
			this.section = this.form.select('input[name="section"]')[0].value;
			

			Sortable.create('items_'+this.section, { handle:'handle', onUpdate:this.update_order.bindAsEventListener(this), only : 'draggable', tag:'TR' });
		}
		
		
		//allow clicking table-cell to select - break in IE7
		/*
		for (i = 0; i < this.form.length; i++){
			if( this.form[i].type=='checkbox' && this.form[i].className!='toggle_select'  ){
				this.form[i].parentNode.observe('click', this.toggle_select.bindAsEventListener(this));
			}
		}*/
	},
	
	select_row: function(e) {
		var target=e.target
		
		if( target.tagName=='TD' ){
			var input=target.parentNode.childNodes[1].childNodes[0];
			
			if( !input.checked ){
				input.checked=true;
				input.parentNode.parentNode.addClassName('result_selected');
			}else{
				input.checked=false;
				input.parentNode.parentNode.removeClassName('result_selected');
			}
		}else{		
			if( target.checked ){
				target.parentNode.parentNode.addClassName('result_selected');
			}else{
				target.parentNode.parentNode.removeClassName('result_selected');
			}
		}
	},
	
	toggle_select: function(e) {
		var row=e.target;
		
		while(row.nodeName!='TR'){
			row=row.parentNode;
		}
			
		if( row.hasClassName('result_selected') ){
			row.removeClassName('result_selected');
			row.select('input[type="checkbox"]')[0].checked=false;
		}else{
			row.addClassName('result_selected');
			row.select('input[type="checkbox"]')[0].checked=true;
		}
		
		this.clear_all_pages();
	},
	
	select_all: function() {
		this.select_none();
		
		for (i = 0; i < this.form.length; i++){
			if( this.form[i].type=='checkbox' ){
				this.form[i].checked = true;
				this.form[i].parentNode.parentNode.addClassName('result_selected');
				//toggle_select(field[i].id);
			}
		}
		
		this.select_all_row.style.display='table-row';
	},
	
	select_none: function() {
		for (i = 0; i < this.form.length; i++){
			if( this.form[i].type=='checkbox' ){
				this.form[i].checked = false;
				this.form[i].parentNode.parentNode.removeClassName('result_selected');
				//toggle_select(field[i].id);
			}
		}
		
		this.clear_all_pages();
	},
	
	toggle_select_all: function() {
		if( this.form.select('input[class="toggle_select"]')[0].checked ){
			this.select_all();
		}else{
			this.select_none();
		}
	},
	
	select_all_pages: function() {
		this.select_all_pages.value=1;
		
		this.select_all_row.style.display='none';
		this.clear_all_row.style.display='table-row';
	},
	
	clear_all_pages: function() {
		this.select_all_pages.value=0;
		
		this.select_all_row.style.display='none';
		this.clear_all_row.style.display='none';
	},
	
	update_order: function() {
		//alert(Sortable.serialize('tbody_list'));
		var options = {
						method : 'post',
						postBody : this.form.serialize()+'&'+Sortable.serialize('items_'+this.section)
					  };
	
		//location.href='_lib/cms/_ajax/update_order.php?'+options['postBody'];
		new Ajax.Request('_lib/cms/_ajax/update_order.php', options);
	}
});


Event.observe(window, 'load', function() {
	initForms();
	initDateFields();
	initMaps();
});
