/**
 * @category  DeWeM
 * @author    DeWeM Team <admin@dewem.com>
 * @copyright	Copyright (C) 2011 dewem.com, All rights reserved.
 * @license		GNU General Public License version 3; see LICENSE.txt or http://www.gnu.org/licenses/gpl-3.0.html
 * @link      http://www.dewem.com 
 * THIS PROGRAM IS DISTRIBUTED "AS IS";. NO WARRANTY OF ANY KIND IS 
 *	EXPRESSED OR IMPLIED. YOU USE AT YOUR OWN RISK. I WILL NOT BE LIABLE FOR DATA 
 *	LOSS, DAMAGES, HACKING, SPAMMING, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS 
 *	WHILE USING OR MISUSING THIS SOFTWARE. 
 */

/** 
 * hier getRequestParameters : 'param1,param2,..'
 *		getRequestValues : 'val1,val2,...'
 *		postParamsString : 'param1=val1&param2=val2&...';
 */
function sendDewemAjaxRequest(phpServerFile, phpMethodName, getRequestParameters, getRequestValues, postParamsString){
	if (!postParamsString){
		postParamsString = null;
	}
	getRequestParameters = 'ajax,phpMethodName,'+getRequestParameters;
	//i use it so as i need to save it in xml
	getRequestValues = getRequestValues.replace(/%/g, 'dewemPercentage');
	getRequestValues = getRequestValues.replace(/ /g, 'dewemSpace');
	getRequestValues = getRequestValues.replace(/"/g, 'dewemQuote');
	getRequestValues = getRequestValues.replace(/'/g, 'dewemSingleQuote');
	getRequestValues = getRequestValues.replace(/#/g, 'dewemNumberSign');
	getRequestValues = getRequestValues.replace(/\//g, 'dewemSlash');
	getRequestValues = '1,'+phpMethodName+','+getRequestValues;
	sendReqDewem(phpServerFile, getRequestParameters, getRequestValues, postParamsString);
}

function getStyleSizeDewem(x,styleProp){
	if (window.getComputedStyle){
		//ff and opera
		var y = parseInt(document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp)); //ff
	}else if (x.currentStyle){
		var y = eval('x.offset'+styleProp);   //ie oh oh oh 
	}
	return y;
}


function setTopOutErrorDewem(outElement){
	var outErrorDiv = document.getElementById('outStandardErrorDewem');
	if (bIEDewem){
		if(ieVersionDewem < 7){
			var innerHtmlErrors = outErrorDiv.innerHTML;
			outErrorDiv.innerHTML = outErrorDiv.innerHTML 
				+ '<br/>You should use Mozilla Firefox or IE with version 7 or later; dewem was optimized for '
				+ '<a href="http://www.mozilla.com/en-US/">Firefox!</a>';
		}
	}
	if (bOPDewem){
		var innerHtmlErrors = outErrorDiv.innerHTML;
		outErrorDiv.innerHTML = outErrorDiv.innerHTML
			+ '<br/>You should allow to control the right mouse button in Opera; dewem was optimized for '
			+ '<a href="http://www.mozilla.com/en-US/">Firefox!</a>';
	}
	zIndexGlobalDewem = zIndexGlobalDewem+1;
	outElement.style.zIndex = zIndexGlobalDewem;
}

function showHourGlassDewem(){
	var hourGlassDiv = document.getElementById('HourGlassDewem');
	var mustHeight = getWinHeight()+getScrollTop();
	if (mustHeight < htmlNodeDewem.scrollHeight){
		mustHeight = htmlNodeDewem.scrollHeight;
	}
	var mustWidth = getWinWidth()+getScrollLeft();
	if (mustWidth < htmlNodeDewem.scrollWidth){
		mustWidth = htmlNodeDewem.scrollWidth;
	}
	
	hourGlassDiv.style.height = mustHeight + 'px'; 
	hourGlassDiv.style.width = mustWidth + 'px';
	hourGlassDiv.style.visibility = 'visible';
}

function getWinHeight(){
	if (typeof( window.innerHeight ) == 'number'){
		//non IE
		var winHeight = window.innerHeight;
	}else if( document.documentElement && document.documentElement.clientHeight ) {
		var winHeight = document.documentElement.clientHeight;
		//ie7 do you see it? never use ie please!!!!
	} else if( document.body && document.body.clientHeight ) {
		var winHeight = document.body.clientHeight;
		//ie6
	}
	return winHeight;
}
function getScrollTop(){
	if (!bIEDewem){
		//non ie 
		var scrollTop = htmlNodeDewem.scrollTop;
	}else if (document.documentElement && document.documentElement.scrollTop){
		var scrollTop = document.documentElement.scrollTop;
		// IE6 +4.01 and user has scrolled
	}else if(document.body && document.body.scrollTop){
		var scrollTop = document.body.scrollTop;
		// IE6,5
	}else{
		// sorry for ie
		var scrollTop = htmlNodeDewem.scrollTop;
	}
	return scrollTop ;
}
function getWinWidth(){
	if (typeof( window.innerWidth ) == 'number'){
		//non IE
		var winWidth = window.innerWidth;
	}else if( document.documentElement && document.documentElement.clientWidth ) {
		var winWidth = document.documentElement.clientWidth;
		//ie7 do you see it? never use ie please!!!!
	} else if( document.body && document.body.clientWidth ) {
		var winWidth = document.body.clientWidth;
		//ie6
	}
	return winWidth;
}
function getScrollLeft(){
	if (!bIEDewem){
		//non ie 
		var scrollLeft1 = htmlNodeDewem.scrollLeft;
	}else if (document.documentElement && document.documentElement.scrollLeft){
		var scrollLeft1 = document.documentElement.scrollLeft;
		// IE6 +4.01 and user has scrolled
	}else if(document.body && document.body.scrollLeft){
		var scrollLeft1 = document.body.scrollLeft;
		// IE5 or DTD 3.2
	}else{
		// sorry for ie
		var scrollLeft1 = htmlNodeDewem.scrollLeft;
	}
	return scrollLeft1 ;
}

function hideHourGlassDewem(){
	var hourGlassDiv = document.getElementById('HourGlassDewem');
	if (hourGlassDiv){
		hourGlassDiv.style.visibility = 'hidden';
	}
	//we need to check and hide the hourglass by upload from the upload frame
	if (parent){
		hourGlassDiv = parent.document.getElementById('HourGlassDewem');
		if (hourGlassDiv){
			hourGlassDiv.style.visibility = 'hidden';
		}
	}
}

String.prototype.htmlEntities = function () {
   return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
};

function trimDewem(str){
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function isValidId(name){
	var ret = true;
	var dewemWords = Array(
			'Area', 'Workel', 'Dewem', 'dewem', 'area', 'workel', 'BaseElement', '_', '&', '?',
			'Default'
		);
	var lengthWords = dewemWords.length;
	for (var i = 0 ; i < lengthWords; i++ ){
		if (name.indexOf(dewemWords[i]) != -1 ){
			ret = false;
			alert('Sorry, but you should not use that word or sign: ' + dewemWords[i]);
			return ret;
		} 
	}	
	return ret;
}

function setRightClassNameDewem(formName){
	var rightClassDiv = document.getElementById(formName+'_className');
	if (rightClassDiv){
		if (rightClassDiv.value != ''){
			var formDiv = document.getElementById(formName);
			if (formDiv){
				formDiv.className = rightClassDiv.value;
			}
		}
	}
	var formDiv = document.getElementById(formName);
	if (formDiv){
		dragMaster.makeDraggable(formDiv);
	}
}


var dragMaster = (function() {
 
    var dragObject
    var mouseOffset
 
    function getMouseOffset(target, e) {
        var docPos    = getPosition(target)
        return {x:e.pageX - docPos.x, y:e.pageY - docPos.y}
    }
 
    function mouseUp(){
        dragObject = null
 
        document.onmousemove = null
        document.onmouseup = null
        document.ondragstart = null
        document.body.onselectstart = null
    }
 
    function mouseMove(e){
        e = fixEvent(e)
 
        with(dragObject.style) {
            position = 'absolute'
            top = e.pageY - mouseOffset.y + 'px'
            left = e.pageX - mouseOffset.x + 'px'
        }
        return false
    }
 
    function mouseDown(e) {
        e = fixEvent(e)
        if (e.which!=1) return
        
        var elementSrc = (e.target) ? e.target: e.srcElement

        if (elementSrc.nodeName != 'DIV') return
        if (elementSrc.className == 'autoOverflow') return
        if (elementSrc.className == 'filesUploadedDewem') return
 
        dragObject  = this
		
		zIndexGlobalDewem = zIndexGlobalDewem + 1;
		dragObject.style.zIndex = zIndexGlobalDewem;
		
        mouseOffset = getMouseOffset(this, e)

        document.onmousemove = mouseMove
        document.onmouseup = mouseUp

        document.ondragstart = function() { return false }
        document.body.onselectstart = function() { return false }
 
        return false
    }
 
    return {
        makeDraggable: function(element){
            element.onmousedown = mouseDown
        }
    }
 
}())
 
function getPosition(e){
    var left = 0
    var top  = 0
 
    while (e.offsetParent){
        left += e.offsetLeft
        top  += e.offsetTop
        e     = e.offsetParent
    }
 
    left += e.offsetLeft
    top  += e.offsetTop
 
    return {x:left, y:top}
}
function fixEvent(e) {
    e = e || window.event
 
    if ( e.pageX == null && e.clientX != null ) {
        var html = document.documentElement
        var body = document.body
        e.pageX = e.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0)
        e.pageY = e.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0)
    }
 
    if (!e.which && e.button) {
        e.which = e.button & 1 ? 1 : ( e.button & 2 ? 3 : ( e.button & 4 ? 2 : 0 ) )
    }
 
    return e
}

function getParameterDewem ( parameterName, queryString ) {
	// Add "=" to the parameter name (i.e. parameterName=value)
	parameterName = parameterName + "=";
	if ( queryString.length > 0 ) {
		// Find the beginning of the string
		var begin = queryString.indexOf ( parameterName );
		// If the parameter name is not found, skip it, otherwise return the value
		if ( begin != -1 ) {
			// Add the length (integer) to the beginning
			begin += parameterName.length;
			// Multiple parameters are separated by the "&" sign
			var end = queryString.indexOf ( "&" , begin );
			if ( end == -1 ) {
				end = queryString.length;
			}
			// Return the string
			return unescape ( queryString.substring ( begin, end ) );
		}
	}
	// Return false if no parameter has been found
	return false;
}

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++) {
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}

var selectedTabsDewem = Array();

function runPreInitDewem(formName){
	//save selected tab num
	var formNameTabs = '#'+formName+'_Tabs';
	if ( $(formNameTabs).attr('id') == formName+'_Tabs' ){
		//tab exist
		var selectedTab = $(formNameTabs).tabs('option', 'selected');
		//set tab num in array
		selectedTabsDewem[formName] = selectedTab;
	}
}

function runInitMethodDewem(formName){
	var formDiv = document.getElementById(formName+'_formName');
	if (!formDiv){
		return;
	}
	var formNameArr = formName.split('_');
	if (formNameArr[0] == 'WorkelForm'){
		runWorkelInit(formName);
	}
}

/**
 * escape : or . for jQuery id's
 */
function jq(myid) { 
	 return myid.replace(/(:|\.)/g,'\\$1');
}

function tryHandleStructure(responseArray){
	var name = responseArray[0];
	var splitNameArr = name.split('_');
	if (splitNameArr.length < 3){
		return false;
	}
	if (splitNameArr[0] != 'AreaForm'){
		return false;
	}
	if (splitNameArr[2] != 'Struct'){
		return false;
	}
	var nameJQ = 'div[name="'+name+'"]';
	jQuery(nameJQ).replaceWith(responseArray[1]);
	return true;
}

function handleDewemOutElement(responseArray){
	var outElement = document.getElementById(responseArray[0]);
	if (!outElement){
		outElement = findPageOutElement(responseArray[0]);
	}else{
		delPageDefEl(outElement);
	}
	if (!outElement){
		var isSuccess = tryHandleStructure(responseArray);
		if (isSuccess){
			return;
		}else{
			//try to handle
		}
	}
	runPreInitDewem(responseArray[0]);
	outElement.innerHTML = responseArray[1].replace(/dewemQuote/g, '&quot;').replace(/dewemSingleQuote/g, '&#39;');
	setRightClassNameDewem(responseArray[0]);
	runInitMethodDewem(responseArray[0]);
	outElement.style.visibility = 'visible';
	setTopOutErrorDewem(outElement);
}

