// JavaScript Document

// Handy functions
function checkForString(fieldName, string) {
	var returnString = fieldName.slice(fieldName.search(string)+1);
	return returnString;
}

function js_array_to_php_array (a) {
    var a_php = "";
    var total = 0;
    for (var key in a)
    {
        ++ total;
        a_php = a_php + "s:" +
                String(key).length + ":\"" + String(key) + "\";s:" +
                String(a[key]).length + ":\"" + String(a[key]) + "\";";
    }
    a_php = "a:" + total + ":{" + a_php + "}";
    return a_php;
}

function getUrlVars() {
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for(var i = 0; i < hashes.length; i++) {
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
}

var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function showExtraField(fieldId, target, value, fieldType) {
	var dataobj = new Object;
	dataobj.target = target;
	dataobj.fieldId = fieldId;
	dataobj.fieldType = fieldType;
	dataobj.value = value;
	dataobj.stupidCache = Math.random();
	new Ajax('_LIB/ajax/injectField.php',{method:'post', data:dataobj, evalScripts:true}).request();
};

function blocking() {
	if ($('addExpDate')) {
		nr = 'addExpDate';
	} else if ($('addExpDateTime')) {
		nr = 'addExpDateTime';
	}
	if (document.layers) {
		current = (document.layers[nr].display == 'none') ? 'block' : 'none';
		document.layers[nr].display = current;
	} else if (document.all) {
		current = (document.all[nr].style.display == 'none') ? 'block' : 'none';
		document.all[nr].style.display = current;
	} else if (document.getElementById) {
		vista = (document.getElementById(nr).style.display == 'none') ? 'block' : 'none';
		document.getElementById(nr).style.display = vista;
	}
}

function triggerCal() {
	if ($$('.calendar')) {
		var dataobj = new Object;
		inputFields = getElementsByClassName('calendar');
		for (var k = 0; k < inputFields.length; k++) {
			var inputFieldId = inputFields[k];
			dataobj.target = inputFieldId.id;
			new Ajax('_LIB/ajax/activateDatePicker.php',{method:'post', data:dataobj, evalScripts:true}).request();
		}
	}
}

function checkEnter(e, objectType, objectId, objectAction) {
	var characterCode;
	if (e && e.which) { //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	} else {
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}
	if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
		document.loginForm.submit();
		return false;
	} else {
		return true;
	}
}

function submitForms() {
	var inputFields = document.getElements('input');
	var selectBoxes = document.getElements('select');
	var textAreas = document.getElements('textarea');
	var fieldNames = new Object;
	var i = 0;
	var forms = $$('.modForm');
	for (i = i; i < inputFields.length; i++) {
		fieldNames[i] = inputFields[i].name;
	}
	for (var n = 0; i < selectBoxes.length + inputFields.length; i++) {
		fieldNames[i] = selectBoxes[n].name;
		n++;
	}
	for (var n = 0; i < textAreas.length + selectBoxes.length + inputFields.length; i++) {
		fieldNames[i] = textAreas[n].name;
		n++;
	}
	if (validateForm(fieldNames) == true) {
		document.forms[0].submit();
	}
}

function orderelements() {
	new Sortables($('sortable'), {	 
		initialize: function(){
			var step = 100;
			this.elements.each(function(element, i){
				element.addClass('draggable');
				var color = [240, 10, step].hsbToRgb();
				element.setStyle('background-color', color);
				step = step - 2;
			});
		}
	});
	$('save').removeClass('hidden');
	$('cancel').removeClass('hidden');
}
function saveorder() {
	var dataobj = new Object;
	dataobj.ids = [];
	dataobj.type = $('sortable').className;
	var elements = $$('#sortable li');
	elements.each(function(element, i){
		dataobj.ids.push(element.id);
	});
	new Ajax('_LIB/ajax/order.php',{ method:'post', data:dataobj,  evalScripts:true }).request();
	$('save').addClass('hidden');
	$('cancel').addClass('hidden');
}

// Modal overlay function
function showModalFrame(type, id, source, data) {
	var dataobj = new Object;
	dataobj.type = type;
	dataobj.id = id;
	dataobj.source = source;
	dataobj.data = data;
	new Ajax('_LIB/ajax/modal.php',{ method:'post', data:dataobj,  evalScripts:true }).request();
}
function selectimage(target, source, title) {
	$(source).value = target.id;
	$(source).previousSibling.removeClass('on');
	$(source).previousSibling.addClass('off');
	$(source).previousSibling.innerHTML = 'endre bilde';
	$(source).nextSibling.innerHTML = target.lastChild.innerHTML;
	$('modal_container').remove();
	$('modal_center_images').remove();
}

// Trigger once elements are ready
window.addEvent('domready', function(){
	// Tooltips and previews
	var previewTips = new Tips($$('.preview'), {
		fixed: true,
		initialize:function(){
			this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 300, wait: false}).set(0);
		},
		onShow: function(toolTip) {
			this.fx.start(1);
		},
		onHide: function(toolTip) {
			this.fx.start(0);
		}
	});
	var helpTips = new Tips($$('.help'), {
		className: 'help',
		initialize:function(){
			this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 300, wait: false}).set(0);
		},
		onShow: function(toolTip) {
			this.fx.start(1);
		},
		onHide: function(toolTip) {
			this.fx.start(0);
		}
	});
	var imagePreviewTips = new Tips($$('.imagePreview'), {
		className: 'imagePreview',
		initialize:function(){
			this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 300, wait: false}).set(0);
		},
		onShow: function(toolTip) {
			this.fx.start(1);
		},
		onHide: function(toolTip) {
			this.fx.start(0);
		}
	});
	var urlvars = getUrlVars();
	if (!urlvars['panel']) {
		var openpanel = 0;
	} else {
		var openpanel = urlvars['panel'];
	}
	var accordion = new Accordion('h2.trigger', 'li.expander', {
		opacity: true,
		alwaysHide: true,
		display: openpanel,
		onActive: function(toggler, element){
			toggler.setStyle('color', '#333');
			toggler.setStyle('font-style', 'italic');
			toggler.setStyle('background-image', 'url(../FE_images/arrowDown.png)');
			toggler.setStyle('background-position', 'top right');
			toggler.setStyle('background-repeat', 'no-repeat');
		},
		onBackground: function(toggler, element){
			toggler.setStyle('color', '#CC0000');
			toggler.setStyle('font-style', 'normal');
			toggler.setStyle('background-image', 'url(../FE_images/arrowRight.png)');
			toggler.setStyle('background-position', 'top right');
			toggler.setStyle('background-repeat', 'no-repeat');
		}
	}, $('accordion'));
	
	if ($('addparagraphs')) {
		var ch_nodes = $ES('span','addparagraphs');
		for (var i=0; i < ch_nodes.length; i++) {
			showExtraField('addedpara', ch_nodes[i].id, ch_nodes[i].id, 'email');
		}
	}
	
	triggerCal();
}); // end dom ready


// Trigger once page is fully loaded
window.addEvent('load', function() {
	// Image cropper
	if ($('cropThisimage')) {
		var targetImage = $('cropThisimage');
		cropBoxHeight = 156;
		cropBoxWidth = 235;
		cropBg = 'CMS_images/cropcross.png';
	}
	if ($('cropThisevent')) {
		var targetImage = $('cropThisevent');
		cropBoxHeight = 156;
		cropBoxWidth = 235;
		cropBg = 'CMS_images/cropcross.png';
	}
	if ($('cropThisbanner')) {
		var targetImage = $('cropThisbanner');
		cropBoxHeight = 227;
		cropBoxWidth = 237;
		cropBg = 'CMS_images/cropcrossBanner.png';
	}
	if ($('cropThisarticle')) {
		var targetImage = $('cropThisarticle');
		cropBoxHeight = 156;
		cropBoxWidth = 235;
		cropBg = 'CMS_images/cropcross.png';
	}
	if ($('cropThisartist')) {
		var targetImage = $('cropThisartist');
		cropBoxHeight = 156;
		cropBoxWidth = 235;
		cropBg = 'CMS_images/cropcross.png';
	}

	if (targetImage) {
		var targetContainer = $('imageCropper');
		var height = cropBoxHeight;
		var width = cropBoxWidth;
		var frame = new Element('div', { 
			'styles':	{
				'height':height,
				'width' :width,
				'position':'absolute',
				'background-image':'url("' + cropBg + '")',
				'background-repeat':'no-repeat',
				'background-color':'white',
				'top':0,
				'left':0
			}
		})
		
		function defineBounds() {
			// define image lower bound
			imgCoords = targetImage.getCoordinates();
			imgTop = imgCoords['top'];
			imgHeight = imgCoords['height'];
			lowerBound = imgHeight + imgTop;
			frameCoords = frame.getCoordinates();
			frameTop = frameCoords['top'];
			frameHeight = frameCoords['height'];
			frameLowerBound = frameHeight + frameTop;
				
			// same for width
			imgLeft = imgCoords['left'];
			imgWidth = imgCoords['width'];
			outerBound = imgLeft + imgWidth;
			frameLeft = frameCoords['left'];
			frameWidth = frameCoords['width'];
			frameOuterBound = frameLeft + frameWidth;
		}
		
		function newCrop() {
			$('newCrop').setStyle('display','none');
			if ($('save')) {
				$('save').setStyle('display','block');
			}
			if (document.getElementById('frame') == null) {					
				// length image 
				w = targetImage.width.toInt();
				h = targetImage.height.toInt();
				frame.effect('opacity').set(0.6);
				frame.setAttribute('id','frame');
				frame.injectInside(targetContainer);
				frame.makeDraggable({ limit: { x: [0,w-width], y: [0,h-height] },
					onComplete: function(){
						frameTop = frame.getTop();
						frameLeft = frame.getLeft();
						var myHeight = $('frame').getCoordinates();
						myHeight = myHeight['height'];
					},
					onDrag: function(){
						defineBounds(); 
					},
					onComplete: function(){
						defineBounds(); 
					}
				});
				frame.addEvent('mouseup',function(){
					var top = frame.getTop();
					var left = frame.getLeft();
					var imagetop = targetImage.getTop();
					var imageleft =targetImage.getLeft();
					var totalleft = left - imageleft;
					var totaltop = top - imagetop;
					defineBounds(); 
				})
				frame.addEvent('mousedown',function(){
					var myHeight = $('frame').getCoordinates();
					myHeight = myHeight['height'];
				})
			}
		}
		if ($('newCrop')) {	
			$('newCrop').addEvent('click',function(){
				newCrop();
			});
		}
		if ($('save')) {
			$('save').addEvent('click',function(){
				parentId = this.parentNode.id;
				coords2 = $('frame').getCoordinates();
				frameWidth = coords2['width'].toInt();
				frameHeight = coords2['height'].toInt();
				frameTop = coords2['top'].toInt();
				frameLeft = coords2['left'].toInt();
				width = frameWidth;
				height = frameHeight;
				w = targetImage.width.toInt();
				h = targetImage.height.toInt();
				var imgCoords = targetImage.getCoordinates();
				imgTop = imgCoords['top'].toInt();
				imgLeft = imgCoords['left'].toInt();
				frameTop = frameTop - imgTop;
				frameLeft = frameLeft - imgLeft;
				var imagename = targetImage.src;
				var p = Math.floor(Math.random()*1000000+1).toString();
				var savename  = "images_users/crop_" + parentId + "_" + p + ".jpg";
				var size = $('frame').getCoordinates();
				height = size['height'].toInt();
				width  = size['width'].toInt();
				if(typeof(frameTop) == "undefined"){ frameTop = 0; }
				if(typeof(frameLeft) == "undefined"){ frameLeft = 0; }
				var dataobj = new Object;
				dataobj.imgname = imagename;
				dataobj.frameTop = frameTop;
				dataobj.frameLeft = frameLeft;
				dataobj.imgWidth = w;
				dataobj.imgHeight = h;
				dataobj.savename = savename;
				dataobj.height = height;
				dataobj.width = width;
				dataobj.parentId = parentId;
				dataobj.imageName = targetImage.alt;
				new Ajax('_LIB/ajax/cropImage.php',{ method:'post', data:dataobj,  evalScripts:true }).request();
				return false;
			})
		}
		if ($('save')) {	
			newCrop();
		}
	}
});