/*

jQuery plugin : pause resume animation

Created by Joe Weitzel

BOX Creative LLC

http://plugins.jquery.com/project/Pause-Resume-animation

*/

jQuery.fn.oldStartAnimation = function(  params, duration, easing, complete, step) {

	if (typeof(easing) === 'undefined') {

		easing = null;

	}

	if (typeof(complete) === 'undefined') {

		complete = null;

	}

	if (typeof(step) === 'undefined') {

		step = null;

	}

	jQuery(this).animate(params, duration, easing, complete, step);

	var data = {

		target:this.get(0),

		params: params,

		duration: duration,

		easing: easing,

		callback: complete,

		step: step,

		startTime: new Date().getTime(),

		timePlayed: 0,

		timeRemaining: 0

	};

	if( !jQuery.pauseableAnimations ) {

		jQuery.extend({ pauseableAnimations: new Array( data ) });

	} else {

		for( var i in jQuery.pauseableAnimations ) {

			if( jQuery.pauseableAnimations[i].target == this.get(0) ) {

				jQuery.pauseableAnimations[i] = data;

			} else {

				jQuery.pauseableAnimations.push( data );

			};

		};

	};

};

jQuery.fn.startAnimation = function(  params, settings ) {

	if (typeof(settings.easing) === 'undefined') {

		settings.easing = null;

	}

	if (typeof(settings.complete) === 'undefined') {

		settings.complete = null;

	}

	if (typeof(settings.step) === 'undefined') {

		settings.step = null;

	}

	jQuery(this).animate( params, settings );

	var data = {

		target:this.get(0),

		params: params,

		duration: settings.duration,

		easing: settings.easing,

		callback: settings.complete,

		step: settings.step,

		startTime: new Date().getTime(),

		timePlayed: 0,

		timeRemaining: 0

	};

	if( !jQuery.pauseableAnimations ) {

		jQuery.extend({ pauseableAnimations: new Array( data ) });

	} else {

		for( var i in jQuery.pauseableAnimations ) {

			if( jQuery.pauseableAnimations[i].target == this.get(0) ) {

				jQuery.pauseableAnimations[i] = data;

			} else {

				jQuery.pauseableAnimations.push( data );

			};

		};

	};

};

jQuery.fn.pauseAnimation = function() {

	if( jQuery.pauseableAnimations ) {

		for(var i in jQuery.pauseableAnimations ) {

			if( jQuery.pauseableAnimations[i].target == this.get(0) ) {

				jQuery(this).stop();

				var now = new Date().getTime();

				var data = jQuery.pauseableAnimations[i];

				data.timePlayed += ( now - data.startTime );

				data.timeRemaining = data.duration - data.timePlayed;

				if( data.timePlayed > data.duration ) {

					var newArray = new Array();

					for( var p in jQuery.pauseableAnimations ) {

						if( jQuery.pauseableAnimations[p] != data ) newArray.push( jQuery.pauseableAnimations[p] );

					};

					jQuery.pauseableAnimations = newArray.length > 0 ? newArray : null;

					delete newArray;

					return this;

				};

				break;

			};

		};

	};

	return this;

};

jQuery.fn.resumeAnimation = function() {

	if( jQuery.pauseableAnimations ) {

		for(var i in jQuery.pauseableAnimations ) {

			var data = jQuery.pauseableAnimations[i];

			if( data.target == this.get(0) ) {

				this.animate( data.params, data.timeRemaining, data.easing, data.callback, data.step );

				data.startTime = new Date().getTime();

				return this;

			};

		};

	};

};
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function colorize(elem, color) {
	elem.style.backgroundColor = color;
}
function on_load_correct_date_combo_boxes_in_form(text) {
	correct_date_combo_boxes(text);
	jQuery('#' + text + 'Month').change(function() {
		correct_date_combo_boxes(text);
	});
	jQuery('#' + text + 'Year').change(function() {
		correct_date_combo_boxes(text);
	});
}
function correct_date_combo_boxes(combo_id_date_prefix) {
	var combo_day = document.getElementById(combo_id_date_prefix + 'Day');
	var combo_month = document.getElementById(combo_id_date_prefix + 'Month');
	var combo_year = document.getElementById(combo_id_date_prefix + 'Year');
	var combo_month_selected_index = combo_month.selectedIndex;
	var number_of_days = 0;
	var leap_year= true;
	if (combo_month_selected_index == 0 || combo_month_selected_index == 2 || combo_month_selected_index == 4 || combo_month_selected_index == 6 || combo_month_selected_index == 7 || combo_month_selected_index == 9 || combo_month_selected_index == 11) {
		number_of_days = 31;
	} else if (combo_month_selected_index == 3 || combo_month_selected_index == 5 || combo_month_selected_index == 8 || combo_month_selected_index == 10) {
		number_of_days = 30;
	} else {
		if (combo_year.value % 400 == 0) {
			leap_year = true;
		} else if (combo_year.value % 100 == 0) {
			leap_year = false;
		} else if (combo_year.value % 4 == 0) {
			leap_year = true;
		} else {
			leap_year = false;
		}
		if (leap_year) {
			number_of_days = 29;
		} else {
			number_of_days = 28
		}
	}
	if (number_of_days < combo_day.options.length) {
		number_of_options_to_be_omitted = combo_day.options.length - number_of_days;
		for (i = 0; i < number_of_options_to_be_omitted; i++) {
			combo_day.options[-1 + combo_day.options.length] = null;
		}
	} else if (number_of_days > combo_day.options.length) {
		number_of_options_to_be_added = number_of_days - combo_day.options.length;
		for (i = 1 + number_of_days - number_of_options_to_be_added; i <= number_of_days; i++) {
			addOption(combo_day, i, i);
		}
	}
}
function addOption(selectbox, text, value) {
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;selectbox.options.add(optn);
}
function emptyDisableSelectBox(selectbox) {
	selectbox = document.getElementById(selectbox);
	selectbox.length = 0;
	selectbox.disabled = true;
}

function correctSelectBoxWithMultiple (selectbox) {
	selectbox = document.getElementById(selectbox);
	selectbox_hasheader_selected = false;
	if (selectbox.options[0].value == '') {
		selectbox_hasheader = 1;
		if (selectbox.options[0].selected) {
			selectbox_hasheader_selected = true;
		}
	} else {
		selectbox_hasheader = 0;
	}
	if (selectbox_hasheader_selected) {
		for (i = selectbox_hasheader; i < selectbox.options.length; i++) {
			selectbox.options[i].selected = false;
		}
	} else {
		if (selectbox_hasheader) {
			var all_selected = true;
			for (i = selectbox_hasheader; i < selectbox.options.length; i++) {
				if (!selectbox.options[i].selected) {
					all_selected = false;
					break;
				}
			}
			if (all_selected) {
				for (i = selectbox_hasheader; i < selectbox.options.length; i++) {
					selectbox.options[i].selected = false;
				}
				selectbox.options[0].selected = true;
			}
		}
	}
}
function refillSelectBoxWithMultiple(array, selectbox, previousselectbox, header) {
	previousselectbox = document.getElementById(previousselectbox);
	selectbox = document.getElementById(selectbox);
	previousselectbox_hasheader_selected = false;
	if (previousselectbox.options[0].value == '') {
		previousselectbox_hasheader = 1;
		if (previousselectbox.options[0].selected) {
			previousselectbox_hasheader_selected = true;
		}
	} else {
		previousselectbox_hasheader = 0;
	}
	selectbox.length = 0;
	selectbox.disabled = true;
	selectbox.style.visibility = 'hidden';
	//jQuery(selectbox).hide();
	for (i = previousselectbox_hasheader; i < previousselectbox.options.length; i++) {
		if (previousselectbox_hasheader_selected || (previousselectbox.options[i].selected && typeof(array[previousselectbox.options[i].value]) != 'undefined')) {
			selectbox.disabled = false;
			//jQuery(selectbox).show();
			selectbox.style.visibility = 'visible';
			break;
		}
	}
	if (!selectbox.disabled) {
		if (header.length > 0) {
			addOption(selectbox, header, '');
		}
		for (i = previousselectbox_hasheader; i < previousselectbox.options.length; i++) {
			if (previousselectbox_hasheader_selected || (previousselectbox.options[i].selected && array[previousselectbox.options[i].value] != 'undefined')) {
				for (keyVar in array[previousselectbox.options[i].value]) {
					addOption(selectbox, array[previousselectbox.options[i].value][keyVar], keyVar);
				}		
			}
		}
		if (header.length > 0) {
			selectbox.options[0].selected = true;
		} else {
			for (i = 0; i < selectbox.options.length; i++) {
				selectbox.options[i].selected = true;
			}
		}
	}
}
/* 
 * More info at: http://phpjs.org
 * 
 * This is version: 2.94
 * php.js is copyright 2009 Kevin van Zonneveld.
 * 
 * Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld
 * (http://kevin.vanzonneveld.net), Onno Marsman, Michael White
 * (http://getsprink.com), Waldo Malqui Silva, Paulo Ricardo F. Santos, Jack,
 * Jonas Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Ates
 * Goral (http://magnetiq.com), Legaev Andrey, Ratheous, Alex, Martijn
 * Wieringa, Nate, lmeyrick (https://sourceforge.net/projects/bcmath-js/),
 * Philippe Baumann, Enrique Gonzalez, Webtoolkit.info
 * (http://www.webtoolkit.info/), Theriault, Ash Searle
 * (http://hexmen.com/blog/), Jani Hartikainen, travc, Ole Vrijenhoek, Carlos
 * R. L. Rodrigues (http://www.jsfromhell.com), stag019, pilus,
 * http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,
 * Michael Grier, marrtins, d3x, Andrea Giammarchi
 * (http://webreflection.blogspot.com), GeekFG (http://geekfg.blogspot.com),
 * Erkekjetter, Johnny Mast (http://www.phpvrouwen.nl), T.Wild, majak, David,
 * Oleg Eremeev, mdsjack (http://www.mdsjack.bo.it), Breaking Par Consulting
 * Inc
 * (http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),
 * Mirek Slugen, Martin (http://www.erlenwiese.de/), Public Domain
 * (http://www.json.org/json2.js), Joris, Steven Levithan
 * (http://blog.stevenlevithan.com), Steve Hilder, KELAN, Arpad Ray
 * (mailto:arpad@php.net), T.J. Leahy, Marc Palau, Josh Fraser
 * (http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),
 * gettimeofday, AJ, Aman Gupta, Felix Geisendoerfer
 * (http://www.debuggable.com/felix), Sakimori, Lars Fischer, Caio Ariede
 * (http://caioariede.com), Alfonso Jimenez (http://www.alfonsojimenez.com),
 * Pellentesque Malesuada, Tyler Akins (http://rumkin.com), gorthaur,
 * Thunder.m, Karol Kowalski, Kankrelune (http://www.webfaktory.info/), Frank
 * Forte, Subhasis Deb, duncan, Gilbert, class_exists, noname, Marco, madipta,
 * 0m3r, David James, Arno, Nathan, Mateusz "loonquawl" Zalega, ReverseSyntax,
 * Scott Cariss, Slawomir Kaniecki, Denny Wardhana, nobbler, sankai, Sanjoy
 * Roy, Douglas Crockford (http://javascript.crockford.com), mktime, marc
 * andreu, ger, john (http://www.jd-tech.net), Ole Vrijenhoek
 * (http://www.nervous.nl/), Steve Clay, Thiago Mata
 * (http://thiagomata.blog.com), Jon Hohle, Linuxworld, lmeyrick
 * (https://sourceforge.net/projects/bcmath-js/this.), Ozh, nord_ua, Pyerre,
 * Soren Hansen, Peter-Paul Koch (http://www.quirksmode.org/js/beat.html),
 * T0bsn, MeEtc (http://yass.meetcweb.com), Brad Touesnard, David Randall,
 * Bryan Elliott, Tim Wiel, XoraX (http://www.xorax.info), djmix, Paul, J A R,
 * Hyam Singer (http://www.impact-computing.com/), kenneth, T. Wild, Raphael
 * (Ao RUDLER), Marc Jansen, Francesco, Lincoln Ramsay, echo is bad, Der Simon
 * (http://innerdom.sourceforge.net/), Eugene Bulkin (http://doubleaw.com/),
 * LH, JB, Bayron Guevara, Cord, Francois, Kristof Coomans (SCK-CEN Belgian
 * Nucleair Research Centre), Pierre-Luc Paour, Martin Pool, Kirk Strobeck,
 * Saulo Vallory, Christoph, Artur Tchernychev, Wagner B. Soares, Valentina De
 * Rosa, Daniel Esteban, Jason Wong (http://carrot.org/), Rick Waldron,
 * Mick@el, Anton Ongson, Simon Willison (http://simonwillison.net), Gabriel
 * Paderni, Marco van Oort, Blues (http://tech.bluesmoon.info/), Luke Godfrey,
 * rezna, Tomasz Wesolowski, Eric Nagel, Pul, Bobby Drake, uestla, Alan C,
 * Yves Sucaet, sowberry, hitwork, Norman "zEh" Fuchs, Ulrich, johnrembo, Nick
 * Callen, ejsanders, Aidan Lister (http://aidanlister.com/), Brian Tafoya
 * (http://www.premasolutions.com/), Philippe Jausions
 * (http://pear.php.net/user/jausions), Orlando, dptr1988, HKM, metjay,
 * strcasecmp, strcmp, Taras Bogach, ChaosNo1, Alexander Ermolaev
 * (http://snippets.dzone.com/user/AlexanderErmolaev), Le Torbi, James, Chris,
 * DxGx, Pedro Tainha (http://www.pedrotainha.com), Philipp Lenssen,
 * penutbutterjelly, Greg Frazier, Tod Gentille, Alexander M Beedie,
 * FremyCompany, baris ozdil, FGFEmperor, Atli r, 3D-GRAF, jakes, gabriel
 * paderni, Yannoo, Luis Salazar (http://www.freaky-media.com/), Tim de
 * Koning, stensi, vlado houba, Jalal Berrami, date, Matteo, Victor, taith,
 * Robin, Matt Bradley, fearphage (http://http/my.opera.com/fearphage/),
 * Manish, davook, Benjamin Lupton, Russell Walker (http://www.nbill.co.uk/),
 * Garagoth, Andrej Pavlovic, Dino, Jamie Beck (http://www.terabit.ca/), DtTvB
 * (http://dt.in.th/2008-09-16.string-length-in-bytes.html), Christian
 * Doebler, setcookie, YUI Library:
 * http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html, Andreas,
 * Blues at http://hacks.bluesmoon.info/strftime/strftime.js, Greenseed,
 * mk.keck, Luke Smith (http://lucassmith.name), Rival, Diogo Resende, Allan
 * Jensen (http://www.winternet.no), Howard Yeend, Kheang Hok Chin
 * (http://www.distantia.ca/), Jay Klehr, Leslie Hoare, Ben Bryan, booeyOH,
 * Amir Habibi (http://www.residence-mixte.com/), Cagri Ekin
 * 
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */ 


function base64_encode (data) {
    // Encodes string using MIME base64 algorithm  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/base64_encode
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Pellentesque Malesuada
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof this.window['atob'] == 'function') {
    //    return atob(data);
    //}
        
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];

    if (!data) {
        return data;
    }

    data = this.utf8_encode(data+'');
    
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1<<16 | o2<<8 | o3;

        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;

        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch (data.length % 3) {
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }

    return enc;
}

function sha1 (str) {
    // Calculate the sha1 hash of a string  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/sha1
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // + namespaced by: Michael White (http://getsprink.com)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: sha1('Kevin van Zonneveld');
    // *     returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'
    var rotate_left = function (n,s) {
        var t4 = ( n<<s ) | (n>>>(32-s));
        return t4;
    };

    /*var lsb_hex = function (val) { // Not in use; needed?
        var str="";
        var i;
        var vh;
        var vl;

        for ( i=0; i<=6; i+=2 ) {
            vh = (val>>>(i*4+4))&0x0f;
            vl = (val>>>(i*4))&0x0f;
            str += vh.toString(16) + vl.toString(16);
        }
        return str;
    };*/

    var cvt_hex = function (val) {
        var str="";
        var i;
        var v;

        for (i=7; i>=0; i--) {
            v = (val>>>(i*4))&0x0f;
            str += v.toString(16);
        }
        return str;
    };

    var blockstart;
    var i, j;
    var W = new Array(80);
    var H0 = 0x67452301;
    var H1 = 0xEFCDAB89;
    var H2 = 0x98BADCFE;
    var H3 = 0x10325476;
    var H4 = 0xC3D2E1F0;
    var A, B, C, D, E;
    var temp;

    str = this.utf8_encode(str);
    var str_len = str.length;

    var word_array = [];
    for (i=0; i<str_len-3; i+=4) {
        j = str.charCodeAt(i)<<24 | str.charCodeAt(i+1)<<16 |
        str.charCodeAt(i+2)<<8 | str.charCodeAt(i+3);
        word_array.push( j );
    }

    switch (str_len % 4) {
        case 0:
            i = 0x080000000;
        break;
        case 1:
            i = str.charCodeAt(str_len-1)<<24 | 0x0800000;
        break;
        case 2:
            i = str.charCodeAt(str_len-2)<<24 | str.charCodeAt(str_len-1)<<16 | 0x08000;
        break;
        case 3:
            i = str.charCodeAt(str_len-3)<<24 | str.charCodeAt(str_len-2)<<16 | str.charCodeAt(str_len-1)<<8    | 0x80;
        break;
    }

    word_array.push( i );

    while ((word_array.length % 16) != 14 ) {word_array.push( 0 );}

    word_array.push( str_len>>>29 );
    word_array.push( (str_len<<3)&0x0ffffffff );

    for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {
        for (i=0; i<16; i++) {W[i] = word_array[blockstart+i];}
        for (i=16; i<=79; i++) {W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);}


        A = H0;
        B = H1;
        C = H2;
        D = H3;
        E = H4;

        for (i= 0; i<=19; i++) {
            temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for (i=20; i<=39; i++) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for (i=40; i<=59; i++) {
            temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for (i=60; i<=79; i++) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        H0 = (H0 + A) & 0x0ffffffff;
        H1 = (H1 + B) & 0x0ffffffff;
        H2 = (H2 + C) & 0x0ffffffff;
        H3 = (H3 + D) & 0x0ffffffff;
        H4 = (H4 + E) & 0x0ffffffff;
    }

    temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);
    return temp.toLowerCase();
}

function utf8_encode ( argString ) {
    // Encodes an ISO-8859-1 string to UTF-8  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/utf8_encode
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // +   bugfixed by: Ulrich
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
    var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");

    var utftext = "";
    var start, end;
    var stringl = 0;

    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;

        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }

    if (end > start) {
        utftext += string.substring(start, string.length);
    }

    return utftext;
}

function str_replace (search, replace, subject, count) {
    // Replaces all occurrences of search in haystack with replace  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/str_replace
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   input by: Oleg Eremeev
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Oleg Eremeev
    // %          note 1: The count parameter must be passed as a string in order
    // %          note 1:  to find a global variable in which the result will be given
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'
    var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
            f = [].concat(search),
            r = [].concat(replace),
            s = subject,
            ra = r instanceof Array, sa = s instanceof Array;
    s = [].concat(s);
    if (count) {
        this.window[count] = 0;
    }

    for (i=0, sl=s.length; i < sl; i++) {
        if (s[i] === '') {
            continue;
        }
        for (j=0, fl=f.length; j < fl; j++) {
            temp = s[i]+'';
            repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
            s[i] = (temp).split(f[j]).join(repl);
            if (count && s[i] !== temp) {
                this.window[count] += (temp.length-s[i].length)/f[j].length;}
        }
    }
    return sa ? s : s[0];
}

function safe_base64_encode(data) {
	return str_replace(['+', '/', '='], ['-', '_', '*'], base64_encode(data));
}
function unclickAllMenuBarHandler() {
	if (jQuery.data(document.body, 'menu_selected').length > 0) {
		var menu_selected = jQuery.data(document.body, 'menu_selected');
		var current_src = jQuery('#' + menu_selected).attr('src');
		var length = current_src.length;
		new_src = current_src.substr(0, length - 8) + '_out.' + current_src.substr(length - 3, 3);
		jQuery('#' + menu_selected).attr('src', new_src).css('cursor', 'pointer');
		jQuery.data(document.body, 'menu_selected', '');
	}
}
function my_light_box_open(url, my_light_box_before_opening_this_popup, my_light_box_after_opening_this_popup) {
	if (current_my_light_box_stack_index == 0) {
		if (typeof(my_light_box_before_opening_the_first_popup) === 'function') {
			my_light_box_before_opening_the_first_popup(url);
		}
	}
	if (typeof(my_light_box_before_opening_every_popup) === 'function') {
		my_light_box_before_opening_every_popup(url);
	}
	if (typeof(my_light_box_before_opening_this_popup) === 'string') {
		eval(my_light_box_before_opening_this_popup);
	}
	current_my_light_box_stack_index++;
	eval('oldScrollTop[' + current_my_light_box_stack_index + '] = jQuery(document).scrollTop();');
	jQuery.ajax({
		type: 'POST',
		url: url,
		//dataType: 'script',
		success: function(data) {
			var top = jQuery(document).scrollTop();
			jQuery('#my_light_box_background_div_' + current_my_light_box_stack_index).css('left', 0);
			jQuery('#my_light_box_background_div_' + current_my_light_box_stack_index).css('top',0);
			jQuery('#my_light_box_background_div_' + current_my_light_box_stack_index).css('width', jQuery(document).width());
			jQuery('#my_light_box_background_div_' + current_my_light_box_stack_index).css('height', jQuery(document).height());
			jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).css('top', top);
			jQuery('#my_light_box_background_div_' + current_my_light_box_stack_index).show();
			jQuery('#my_light_box_active_div_content_' + current_my_light_box_stack_index).empty().html(data);
			jQuery('#my_light_box_active_div_close_' + current_my_light_box_stack_index).show();
			jQuery('#my_light_box_active_div_content_' + current_my_light_box_stack_index).show();
			jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).css('opacity', 0.01).show();
			jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).css('left', 0.5 * (screen.width - my_light_box_active_div_width[current_my_light_box_stack_index] - jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).width()));
			jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).animate({opacity:1}, 1000, function() {
				if (typeof(my_light_box_after_opening_this_popup) === 'string') {
					eval(my_light_box_after_opening_this_popup);
				}
				if (typeof(my_light_box_after_opening_every_popup) === 'function') {
					my_light_box_after_opening_every_popup(url);
				}
				if (current_my_light_box_stack_index == 1) {
					if (typeof(my_light_box_after_opening_the_first_popup) === 'function') {
						my_light_box_after_opening_the_first_popup(url);
					}
				}
			});
		}
	});
	if (current_my_light_box_stack_index == 1) {
		jQuery('#listing_items_of_any_type').attr('id', 'listing_items_of_any_type_old');
	}
}
function my_light_box_close(my_light_box_before_closing_this_popup, my_light_box_after_closing_this_popup) {
	if (current_my_light_box_stack_index > 0) {
		if (current_my_light_box_stack_index == 1) {
			if (typeof(my_light_box_before_closing_the_last_popup) === 'function') {
				my_light_box_before_closing_the_last_popup();
			}
		}
		if (typeof(my_light_box_before_closing_every_popup) === 'function') {
			my_light_box_before_closing_every_popup();
		}
		if (typeof(my_light_box_before_closing_this_popup) === 'string') {
			eval(my_light_box_before_closing_this_popup);
		}
		CKEditorClean();
		jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).animate({opacity:0}, 250, function() {
			jQuery('#my_light_box_active_div_close_title_' + current_my_light_box_stack_index).empty().html('').css('width', 'auto');
			jQuery('#my_light_box_active_div_content_' + current_my_light_box_stack_index).empty().html('');
			jQuery('#my_light_box_active_div_close_' + current_my_light_box_stack_index).hide();
			jQuery('#my_light_box_active_div_content_' + current_my_light_box_stack_index).hide();
			jQuery('#my_light_box_background_div_' + current_my_light_box_stack_index).hide();
			jQuery('#my_light_box_active_div_' + current_my_light_box_stack_index).hide();
			//eval('jQuery(document).scrollTop(oldScrollTop[' + current_my_light_box_stack_index + ']);');
			 captcha(); 
			if (current_my_light_box_stack_index == 1) {
				jQuery('#listing_items_of_any_type_old').attr('id', 'listing_items_of_any_type');
			}
			current_my_light_box_stack_index--;
			if (typeof(my_light_box_after_closing_this_popup) === 'string') {
				eval(my_light_box_after_closing_this_popup);
			}
			if (typeof(my_light_box_after_closing_every_popup) === 'function') {
				my_light_box_after_closing_every_popup();
			}
			if (current_my_light_box_stack_index == 0) {
				if (typeof(my_light_box_after_closing_the_last_popup) === 'function') {
					my_light_box_after_closing_the_last_popup();
				}
			}
		});
	}
}
function my_light_box_get(data) {//alert(data);
	jQuery('#my_light_box_active_div_content_' + current_my_light_box_stack_index).empty().html(data);
}
function hey_tree_do_your_behavior(elem) {
	if (typeof(JSTreeObj.filePathBaseBrowseURL) == 'string') {
		var url = JSTreeObj.filePathBaseBrowseURL;
	} else {
		var depth = JSTreeObj.get_the_elem_depth_in_the_tree(null, elem);
		if (typeof(JSTreeObj.filePathBaseBrowseURL[depth]) == 'undefined' || typeof(JSTreeObj.filePathBaseBrowseURL[depth]) != 'string') {
			var url = '';
		} else {
			var url = JSTreeObj.filePathBaseBrowseURL[depth];
		}
	}
	if (url != '' && url !='#') {
		if (url.substr(0, 7) != 'http://' && url.substr(0, 8) != 'https://') {
			url += elem.id.replace(/[^0-9]/g, '');
			//url += '/light_box_is_popped_up:anything_here';
		}
		my_light_box_open(url);
	}
}
function CKEditorSubmit() {//alert('f');
	if (typeof(CKEDITOR) != 'undefined') {
		for (instance in CKEDITOR.instances) {
			//alert(instance);
			//alert(CKEDITOR.instances[instance].getData());
			//alert(CKEDITOR.instances.CategoryDescriptionEn.getData());
			try {
				CKEDITOR.instances[instance].updateElement();
			} catch(err) {
				delete (CKEDITOR.instances[instance]);
			}
		}
	}
}
function CKEditorClean() {
	if (typeof(CKEDITOR) != 'undefined') {
		for (instance in CKEDITOR.instances) {
			delete (CKEDITOR.instances[instance]);
		}
	}
}
function in_array(needle, array) {
	_return = false;
	for (i = 0; i < array.length; i++) {
		if (array[i] == needle) {
			_return = true;
			break;
		}
	}
	return _return;
}
function ajaxAvailable() {
	if (jQuery.active == 0) {
		return true;	
	}
	return false;
}
function CKEditorRemoveHeadAndTopIfPossible() {
	jQuery('table.cke_editor').each(function() {
		if (jQuery('tbody:first > tr:first > td.cke_top:first div.cke_toolbox:first span', this).size() < 2) {
			jQuery('tbody:first > tr:first', this).hide();
			jQuery('tbody:first > tr:last', this).hide();
		}
	});
}
function recalculateURLBeforeAdvancedSearch(url, real_controller) {
	jQuery('.advancedsearch' + real_controller).each(function() {
		var field = this.id.substr(('advancedsearch' + real_controller + '_').length);
		if (jQuery(this).val().length > 0) {
			if (jQuery(this).attr('type') != 'text' || jQuery(this).hasClass('number')) {
				url += '/' + field + ':' + jQuery(this).val();	
			} else {
				url += '/' + field + ':' + safe_base64_encode(jQuery(this).val());
			}
		}
	});
	url += '/limit:' + jQuery('#advancedsearch' + real_controller + '_limit').val();
	url += '/sort:' + jQuery('#advancedsearch' + real_controller + '_sort').val();
	url += '/direction:' + jQuery('#advancedsearch' + real_controller + '_direction').val();
	return url;
}
function readableDate_ar() {
	var d_names = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	var d_names = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
	var d_names = new Array("الأحد", "الإثنين", "الثلثاء", "الأربعاء", "الخميس", "الجمعة", "السّبت");
	var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	var m_names = new Array("كانون الثّاني", "شباط", "آذار", "نيسان", "أيّار", "حزيران", "تمّوز", "آب", "أيلول", "تشرين الأوّل", "تشرين الثّاني", "كانون الأوّل");
	
	var d = new Date();
	var curr_day = d.getDay();
	var curr_date = d.getDate();
	var curr_month = d.getMonth();
	var curr_year = d.getFullYear();
	
	var sup = "";
	if (curr_date == 1 || curr_date == 21 || curr_date ==31) {
		sup = "st";
	} else if (curr_date == 2 || curr_date == 22) {
		sup = "nd";
	} else if (curr_date == 3 || curr_date == 23) {
		sup = "rd";
	} else {
		sup = "th";
	}
	var sup = "";
	var curr_hour = d.getHours();
	var curr_min = d.getMinutes();

	if (curr_hour < 12) {
		a_p = "AM";
		a_p = "ق.ظ";
	} else {
		a_p = "PM";
		a_p = "ب.ظ";
	}
	if (curr_hour == 0) {
		curr_hour = 12;
	}
	if (curr_hour > 12) {
		curr_hour = curr_hour - 12;
	}
	curr_min = curr_min + "";
	if (curr_min.length == 1) {
		curr_min = "0" + curr_min;
	}
	//return d_names[curr_day] + ", " + curr_date + "<SUP>" + sup + "</SUP> " + m_names[curr_month] + " " + curr_year + ' ('+  curr_hour + " : " + curr_min + " " + a_p + ')';
	return d_names[curr_day] + " " + curr_date + "<SUP>" + sup + "</SUP> " + m_names[curr_month] + " " + curr_year;
}

var current_catalog_id = 0;
var iframe_index = -1;
var CKEditor_image_plugin_select_an_image_id = 0;
var CKEditor_current_number = 0;
var allowed_extensions = new Array();
var plugin_controller_action_named_pass = '';
var url_popup = '';
var pageX = 0;
var pageY = 0;
var TINY={};
function T$(id){return document.getElementById(id)}
function T$$$(){return document.all?1:0}
function T$$(e,p){return p.getElementsByTagName(e)}
/*
my_light_box_before_opening_the_first_popup(url);
my_light_box_before_opening_every_popup(url);
eval(my_light_box_before_opening_this_popup);
eval(my_light_box_after_opening_this_popup);
my_light_box_after_opening_every_popup(url);
my_light_box_after_opening_the_first_popup(url);
my_light_box_before_closing_the_last_popup();
my_light_box_before_closing_every_popup()
eval(my_light_box_before_closing_this_popup);
eval(my_light_box_after_closing_this_popup);
my_light_box_after_closing_every_popup();
my_light_box_after_closing_the_last_popup();
*/
