PageRenderTime 103ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 2ms

/design/theme/base-responsive-v2/ec-store-js.js

https://github.com/EmranAhmed/wp-easycart
JavaScript | 3178 lines | 2306 code | 585 blank | 287 comment | 755 complexity | 45ac621478fa42803509cf497dec41e3 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1. function ec_product_show_quick_view_link( modelnum ){
  2. jQuery('#ec_product_quick_view_' + modelnum).fadeIn(100);
  3. }
  4. function ec_product_hide_quick_view_link( modelnum ){
  5. jQuery('#ec_product_quick_view_' + modelnum).fadeOut(100);
  6. }
  7. function ec_product_show_quick_view( modelnum ){
  8. jQuery('#ec_product_quick_view_box_' + modelnum).fadeIn(100);
  9. }
  10. function ec_product_hide_quick_view( modelnum ){
  11. jQuery('#ec_product_quick_view_box_' + modelnum).fadeOut(100);
  12. }
  13. function ec_thumb_quick_view_click( modelnum, level, imgnum ){
  14. if( document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 1 + "_" + level ) ){
  15. jQuery('#ec_image_quick_view_' + modelnum + "_" + 1 + "_" + level ).hide();
  16. }
  17. if( document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 2 + "_" + level ) )
  18. jQuery('#ec_image_quick_view_' + modelnum + "_" + 2 + "_" + level ).hide();
  19. if( document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 3 + "_" + level ) )
  20. jQuery('#ec_image_quick_view_' + modelnum + "_" + 3 + "_" + level ).hide();
  21. if( document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 4 + "_" + level ) )
  22. jQuery('#ec_image_quick_view_' + modelnum + "_" + 4 + "_" + level ).hide();
  23. if( document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 5 + "_" + level ) )
  24. jQuery('#ec_image_quick_view_' + modelnum + "_" + 5 + "_" + level ).hide();
  25. jQuery('#ec_image_quick_view_' + modelnum + "_" + imgnum + "_" + level ).show();
  26. }
  27. function ec_image_quick_view_click( modelnum, level, imgnum ){
  28. return false;
  29. }
  30. function product_quantity_change( ){
  31. // Possibly do something on quantity change
  32. }
  33. function ec_swatch_quick_view_click( modelnum, level, imgnum ){
  34. if( level == 1 && document.getElementById( 'use_optionitem_images_' + modelnum ).value == 1 ){
  35. ec_image_quick_view_update( modelnum, level, imgnum );
  36. }
  37. if(document.getElementById( 'ec_swatch_quick_view_' + modelnum + "_" + level + "_" + imgnum ).className != "ec_product_swatch_out_of_stock"){
  38. var i=0;
  39. while( document.getElementById( 'ec_swatch_quick_view_' + modelnum + "_" + level + "_" + i ) ){
  40. if( document.getElementById( 'ec_swatch_quick_view_' + modelnum + "_" + level + "_" + i ).className != "ec_product_swatch_out_of_stock"){
  41. document.getElementById( 'ec_swatch_quick_view_' + modelnum + "_" + level + "_" + i ).className = "ec_product_swatch";
  42. }
  43. i++;
  44. }
  45. document.getElementById( 'ec_swatch_quick_view_' + modelnum + "_" + level + "_" + imgnum ).className = "ec_product_swatch_selected";
  46. }
  47. }
  48. function ec_image_quick_view_update( modelnum, level, imgnum ){
  49. if(this.document.getElementById( 'ec_swatch_' + modelnum + "_" + level + "_" + imgnum ).className != "ec_product_swatch_out_of_stock"){
  50. var i=0;
  51. while( this.document.getElementById( 'ec_swatch_' + modelnum + "_" + level + "_" + i ) ){
  52. if(this.document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 1 + "_" + i ))
  53. jQuery('#ec_image_quick_view_' + modelnum + "_" + 1 + "_" + i ).hide();
  54. if(this.document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 2 + "_" + i ))
  55. jQuery('#ec_image_quick_view_' + modelnum + "_" + 2 + "_" + i ).hide();
  56. if(this.document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 3 + "_" + i ))
  57. jQuery('#ec_image_quick_view_' + modelnum + "_" + 3 + "_" + i ).hide();
  58. if(this.document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 4 + "_" + i ))
  59. jQuery('#ec_image_quick_view_' + modelnum + "_" + 4 + "_" + i ).hide();
  60. if(this.document.getElementById( 'ec_image_quick_view_' + modelnum + "_" + 5 + "_" + i ))
  61. jQuery('#ec_image_quick_view_' + modelnum + "_" + 5 + "_" + i ).hide();
  62. if(this.document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 1 + "_" + i ))
  63. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 1 + "_" + i ).hide();
  64. if(this.document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 2 + "_" + i ))
  65. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 2 + "_" + i ).hide();
  66. if(this.document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 3 + "_" + i ))
  67. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 3 + "_" + i ).hide();
  68. if(this.document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 4 + "_" + i ))
  69. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 4 + "_" + i ).hide();
  70. if(this.document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 5 + "_" + i ))
  71. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 5 + "_" + i ).hide();
  72. i++;
  73. }
  74. jQuery('#ec_image_quick_view_' + modelnum + "_" + 1 + "_" + imgnum ).show();
  75. if( document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 1 + "_" + imgnum ) )
  76. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 1 + "_" + imgnum ).show();
  77. if( document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 2 + "_" + imgnum ) )
  78. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 2 + "_" + imgnum ).show();
  79. if( document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 3 + "_" + imgnum ) )
  80. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 3 + "_" + imgnum ).show();
  81. if( document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 4 + "_" + imgnum ) )
  82. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 4 + "_" + imgnum ).show();
  83. if( document.getElementById( 'ec_thumb_quick_view_' + modelnum + "_" + 5 + "_" + imgnum ) )
  84. jQuery('#ec_thumb_quick_view_' + modelnum + "_" + 5 + "_" + imgnum ).show();
  85. }
  86. }
  87. function ec_product_image_click( model, level, num ){
  88. return true;
  89. }
  90. function ec_image_click( model, level, num ){
  91. return true; // just go to the link
  92. }
  93. function ec_product_details_swap_image( modelnum, level, imgnum ){
  94. var i=1;
  95. while( document.getElementById( 'ec_image_quick_view_' + modelnum + '_' + i + '_' + level ) ){
  96. document.getElementById( 'ec_image_quick_view_' + modelnum + '_' + i + '_' + level ).className = 'ec_product_image_inactive';
  97. i++;
  98. }
  99. document.getElementById( 'ec_image_quick_view_' + modelnum + '_' + imgnum + '_' + level ).className = 'ec_product_image';
  100. }
  101. var content_width = 1000;
  102. jQuery( document ).ready( function( ){
  103. content_width = jQuery( "#ec_product_page" ).width( );
  104. resize_product_layout( );
  105. if( jQuery( '.ec_product_details_page' ).width( ) < 550 ){
  106. jQuery( '.ec_product_details_right_side' ).css( 'width', '100%' );
  107. jQuery( '.ec_product_details_right_side' ).css( 'float', 'left' );
  108. jQuery( '.ec_product_details_right_side' ).css( 'margin-left', '0px' );
  109. jQuery( '.ec_product_details_left_side' ).css( 'width', '100%' );
  110. }
  111. });
  112. jQuery( window ).resize( function( ){
  113. if( content_width != jQuery( "#ec_product_page" ).width( ) ){
  114. content_width = jQuery( "#ec_product_page" ).width( );
  115. resize_product_layout( );
  116. }
  117. });
  118. function resize_product_layout( ){
  119. if( document.getElementById( 'ec_product_details_mag_viewer' ) ){
  120. var position_top = jQuery( '.ec_product_details_left_side' ).offset().top;
  121. var margin_bottom = parseInt( jQuery( '.ec_product_details_top_bar' ).css( "margin-bottom" ) );
  122. jQuery( '#ec_product_details_mag_viewer' ).css( "top", position_top + margin_bottom + 2 );
  123. }
  124. var product_width = jQuery( "#ec_product_item1" ).width( );
  125. var num_products_per_row = Math.floor( content_width / product_width );
  126. var remaining_space = content_width - ( num_products_per_row * product_width );
  127. var margin_between_product = remaining_space / ( ( ( num_products_per_row - 1 ) * 2 ) );
  128. if( Number(margin_between_product) < 1 )
  129. margin_between_product = 0;
  130. var i = 0;
  131. while( document.getElementById( "ec_product_item" + (i+1) ) ){
  132. if( i%num_products_per_row == 0 ){ //This is left product
  133. document.getElementById( "ec_product_item" + (i+1) ).setAttribute("class", "ec_product left");
  134. }else if( i%num_products_per_row == num_products_per_row-1 ){ // This is the right product
  135. document.getElementById( "ec_product_item" + (i+1) ).setAttribute("class", "ec_product right");
  136. }else{ // This is a middle product
  137. document.getElementById( "ec_product_item" + (i+1) ).setAttribute("class", "ec_product middle");
  138. }
  139. i++;
  140. }
  141. // Change class for left products so margins are correct
  142. jQuery( ".ec_product.left" ).css( "margin-left", "0px" );
  143. jQuery( ".ec_product.left" ).css( "margin-right", margin_between_product + "px" );
  144. // Change class for middle products so margins are correct
  145. jQuery( ".ec_product.middle" ).css( "margin-left", margin_between_product + "px" );
  146. jQuery( ".ec_product.middle" ).css( "margin-right", margin_between_product + "px" );
  147. // Change class for right products so margins are correct
  148. jQuery( ".ec_product.right" ).css( "margin-left", "0px" );
  149. jQuery( ".ec_product.right" ).css( "margin-right", "0px" );
  150. }// Base Theme - Product Filter Bar Javascript Document// JavaScript Document// EC Product Page JavaScript Document
  151. function change_product_sort(menu_id, menu_name, submenu_id, submenu_name, subsubmenu_id, subsubmenu_name, manufacturer_id, pricepoint_id, currentpage_selected, perpage, URL, divider){
  152. var url_string = URL + divider + "filternum=" + document.getElementById('sortfield').value;
  153. if( subsubmenu_id != 0 ){
  154. url_string = url_string + "&subsubmenuid=" + subsubmenu_id;
  155. if( subsubmenu_name != 0 )
  156. url_string = url_string + "&subsubmenu=" + subsubmenu_name;
  157. }else if( submenu_id != 0 ){
  158. url_string = url_string + "&submenuid=" + submenu_id;
  159. if( submenu_name != 0 )
  160. url_string = url_string + "&submenu=" + submenu_name;
  161. }else if( menu_id != 0 ){
  162. url_string = url_string + "&menuid=" + menu_id;
  163. if( menu_name != 0 )
  164. url_string = url_string + "&menu=" + menu_name;
  165. }
  166. if( manufacturer_id > 0 )
  167. url_string = url_string + "&manufacturer=" + manufacturer_id;
  168. if( pricepoint_id > 0 )
  169. url_string = url_string + "&pricepoint=" + pricepoint_id;
  170. if( currentpage_selected )
  171. url_string = url_string + "&pagenum=" + currentpage_selected;
  172. if( perpage )
  173. url_string = url_string + "&perpage=" + perpage;
  174. window.location = url_string;
  175. }jQuery(document).ready(
  176. function() {
  177. // In case a theme over-rides images, we need to make sure all inactive images get hidden on load
  178. jQuery( ".ec_product_image_inactive" ).hide( );
  179. // Initialize the available quick view boxes
  180. jQuery(".ec_product_quick_view_box_holder").each( function( ){
  181. var temp_split = jQuery( this ).attr( "id" ).split( "ec_product_quick_view_box_" );
  182. ec_initialize_options_product( temp_split[1] );
  183. });
  184. if( document.getElementById( 'ec_product_details_magbox' ) ){
  185. if( document.getElementById( 'ec_product_details_description_tab' ) ){
  186. if( document.getElementById( 'ec_product_details_specifications' ) )
  187. jQuery( '#ec_product_details_specifications' ).hide( );
  188. if( document.getElementById( 'ec_product_details_customer_reviews' ) )
  189. jQuery( '#ec_product_details_customer_reviews' ).hide( );
  190. }
  191. jQuery('.ec_product_details_images img').hover(
  192. function (){
  193. if( jQuery(window).width() > 960 ){
  194. if( !jQuery.browser.msie ){
  195. //jQuery('#ec_product_details_magbox').fadeIn(100);
  196. }
  197. var hasTouch = ("ontouchstart" in window);
  198. if( !hasTouch ){
  199. jQuery('#ec_product_details_mag_viewer').fadeIn(100);
  200. jQuery("#ec_product_details_mag_viewer").html('<img src="' + this.src + '" class="ec_product_details_mag_viewer_image" style="width:800px; height:800px;" width="800" height="800">');
  201. }
  202. }
  203. },
  204. function (){
  205. if( !jQuery.browser.msie ){
  206. //jQuery('#ec_product_details_magbox').fadeOut(100);
  207. }
  208. jQuery('#ec_product_details_mag_viewer').fadeOut(100);
  209. }
  210. );
  211. var position_top = jQuery( '.ec_product_details_left_side' ).offset().top;
  212. var margin_bottom = parseInt( jQuery( '.ec_product_details_top_bar' ).css( "margin-bottom" ) );
  213. jQuery( '#ec_product_details_mag_viewer' ).css( "top", position_top + margin_bottom + 2 );
  214. jQuery(document).bind('mousemove', function( e ){
  215. jQuery('#ec_product_details_magbox').css({ 'left': e.pageX - jQuery(e.target).offset().left - 20, 'top': e.pageY - jQuery(e.target).offset().top + 225});
  216. // top left position, image should be 0,0
  217. // top right position, image should be at -550, 0
  218. // bottom left position, image should be at 0, -550
  219. // bottom right position, image should be at -550, -550
  220. var mag_box_size = 350;
  221. var small_img_width = 350;
  222. var small_img_height = 350;
  223. var large_img_width = 800;
  224. var large_img_height = 800;
  225. var move_width = large_img_width - mag_box_size;
  226. var move_height = large_img_height - mag_box_size;
  227. var left_pos = e.pageX - jQuery( e.target ).offset( ).left;
  228. var top_pos = e.pageY - jQuery( e.target).offset( ).top;
  229. // %accross * amount to move * negative move distance
  230. var left = ( left_pos / small_img_width ) * move_width * -1;
  231. var top = ( top_pos / small_img_height ) * move_height * -1;
  232. jQuery('#ec_product_details_mag_viewer img').css({ 'left': left, 'top': top});
  233. });
  234. }
  235. }
  236. );
  237. // tab listener
  238. function update_content_areas( item_num ){
  239. if( item_num == 1 ){
  240. jQuery( '#ec_product_details_description' ).show( );
  241. document.getElementById( 'ec_product_details_description_tab' ).className = "ec_product_details_tab_selected";
  242. }else{
  243. jQuery( '#ec_product_details_description' ).hide( );
  244. document.getElementById( 'ec_product_details_description_tab' ).className = "ec_product_details_tab";
  245. }
  246. if( document.getElementById( 'ec_product_details_specifications' ) ){
  247. if( item_num == 2 ){
  248. jQuery( '#ec_product_details_specifications' ).show( );
  249. document.getElementById( 'ec_product_details_specifications_tab' ).className = "ec_product_details_tab_selected";
  250. }else{
  251. jQuery( '#ec_product_details_specifications' ).hide( );
  252. document.getElementById( 'ec_product_details_specifications_tab' ).className = "ec_product_details_tab";
  253. }
  254. }
  255. if( document.getElementById( 'ec_product_details_customer_reviews' ) ){
  256. if( item_num == 3 ){
  257. jQuery( '#ec_product_details_customer_reviews' ).show( );
  258. document.getElementById( 'ec_product_details_customer_reviews_tab' ).className = "ec_product_details_tab_selected";
  259. }else{
  260. jQuery( '#ec_product_details_customer_reviews' ).hide( );
  261. document.getElementById( 'ec_product_details_customer_reviews_tab' ).className = "ec_product_details_tab";
  262. }
  263. }
  264. }
  265. // Set initial variables
  266. var model_number = "";
  267. var product_id = "";
  268. var current_rating = -1;
  269. var selected_option_quantity = 0;
  270. /////////////// OPTION FUNCTIONS ///////////////////////////////
  271. // Once the page has loaded we can initialize the commonly used variables.
  272. function ec_update_product_details_variables( ){
  273. model_number = document.getElementById( 'model_number' ).value;
  274. product_id = document.getElementById('product_id').value;
  275. }
  276. // Initialize the product details page for option sets
  277. function ec_initialize_options( ){
  278. ec_update_product_details_variables( );
  279. if( ec_uses_stock_quantities( model_number ) ){
  280. if( ec_is_swatch_set( 1 ) ) ec_set_swatches_by_stock_quantities( 1 );
  281. else if( ec_is_combo_box( 1 ) ) ec_set_combo_by_stock_quantities( 1 );
  282. if( ec_is_swatch_set( 1 ) && ec_is_swatch_set( 2 )) ec_set_swatches_by_stock_quantities( 2 );
  283. else if( ec_is_swatch_set( 1 ) && ec_is_combo_box( 2 )) ec_set_combo_by_stock_quantities( 2 );
  284. else if( ec_is_swatch_set( 2 ) ) ec_clear_swatch_set( 2 );
  285. else if( ec_is_combo_box( 2 ) ) ec_clear_combo_box( 2 );
  286. if( ec_is_swatch_set( 3 ) ) ec_clear_swatch_set( 3 );
  287. else if( ec_is_combo_box( 3 ) ) ec_clear_combo_box( 3 );
  288. if( ec_is_swatch_set( 4 ) ) ec_clear_swatch_set( 4 );
  289. else if( ec_is_combo_box( 4 ) ) ec_clear_combo_box( 4 );
  290. if( ec_is_swatch_set( 5 ) ) ec_clear_swatch_set( 5 );
  291. else if( ec_is_combo_box( 5 ) ) ec_clear_combo_box( 5 );
  292. }
  293. }
  294. function ec_initialize_options_product( modnum ){
  295. model_number = modnum;
  296. if( ec_uses_stock_quantities( modnum ) ){
  297. if( ec_is_swatch_set( 1 ) ) ec_set_swatches_by_stock_quantities( 1 );
  298. else if( ec_is_combo_box( 1 ) ) ec_set_combo_by_stock_quantities( 1 );
  299. if( ec_is_swatch_set( 1 ) && ec_is_swatch_set( 2 )) ec_set_swatches_by_stock_quantities( 2 );
  300. else if( ec_is_swatch_set( 1 ) && ec_is_combo_box( 2 )) ec_set_combo_by_stock_quantities( 2 );
  301. else if( ec_is_swatch_set( 2 ) ) ec_clear_swatch_set( 2 );
  302. else if( ec_is_combo_box( 2 ) ) ec_clear_combo_box( 2 );
  303. if( ec_is_swatch_set( 3 ) ) ec_clear_swatch_set( 3 );
  304. else if( ec_is_combo_box( 3 ) ) ec_clear_combo_box( 3 );
  305. if( ec_is_swatch_set( 4 ) ) ec_clear_swatch_set( 4 );
  306. else if( ec_is_combo_box( 4 ) ) ec_clear_combo_box( 4 );
  307. if( ec_is_swatch_set( 5 ) ) ec_clear_swatch_set( 5 );
  308. else if( ec_is_combo_box( 5 ) ) ec_clear_combo_box( 5 );
  309. }
  310. }
  311. // When a swatch changes, update the state of the page
  312. function ec_swatch_click( modelnum, level, num ){
  313. model_number = modelnum;
  314. if( document.getElementById( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + num ) )
  315. element_name = 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + num;
  316. else
  317. element_name = 'ec_swatch_' + model_number + "_" + level + "_" + num;
  318. if( document.getElementById( element_name ).className != "ec_product_swatch_out_of_stock" ){
  319. // Update the selected optionitem_id
  320. document.getElementById( 'ec_option' + level + "_" + model_number ).value = document.getElementById( element_name ).getAttribute( "data-optionitemid" );
  321. // If first level, AND uses option item images, swap out the product image
  322. if( ec_uses_optionitem_images( ) && level == 1 ){
  323. ec_update_product_details_images( num, level );
  324. }
  325. // Update the swatches to reflect the new selection
  326. ec_update_swatch_images( level, num );
  327. // If we use stock quantities, update the next box to reflect the correct stock count
  328. if( ec_uses_stock_quantities( ) ){
  329. ec_update_next_option_level( level, num );
  330. }//close if uses stock quantities
  331. }//close check for out of stock
  332. }//close ec_product_details_swatch_change
  333. // Run when the combo box changes
  334. function ec_product_details_combo_change( level, modelnum ){
  335. model_number = modelnum;
  336. // Only update stock stuff if this product uses that option.
  337. if( ec_uses_stock_quantities( model_number ) ){
  338. // If the user selected a value (not index 0!)
  339. if( document.getElementById( 'ec_option' + level + "_" + model_number ).selectedIndex > 0 ){
  340. ec_update_next_option_level( level, document.getElementById( 'ec_option' + level + "_" + model_number ).selectedIndex );
  341. // Otherwise reset to the previous level or reset all if level 1
  342. }else{
  343. if( level == 1 ){
  344. if( ec_uses_optionitem_images( ) ){
  345. ec_update_product_details_images( level, 0 );
  346. }
  347. ec_update_next_option_level( level, document.getElementById( 'ec_option' + level + "_" + model_number ).selectedIndex - 1 );
  348. }else{
  349. ec_update_next_option_level( level-1, get_selected_option_index( level - 1) );
  350. }//close if/else for level 1
  351. }//close if/else for 0 index check
  352. }//close check if uses stock quantities
  353. if( ec_uses_optionitem_images( ) && level == 1 && document.getElementById( 'ec_option' + level + "_" + model_number ).selectedIndex > 0 ){
  354. ec_update_product_details_images( document.getElementById( 'ec_option' + level + "_" + model_number ).selectedIndex - 1, level );
  355. }
  356. }// close ec_option_combo_change
  357. // Swap the product image
  358. function ec_thumb_click( modelnum, image_index, image_number ){
  359. var model_number = modelnum;
  360. var i=1;
  361. while( document.getElementById( 'ec_image_' + model_number + "_" + i + "_" + image_index ) ){
  362. jQuery('#ec_image_' + model_number + "_" + i + "_" + image_index ).hide();
  363. jQuery('#ec_image_quick_view_' + model_number + "_" + i + "_" + image_index ).hide();
  364. i++;
  365. }
  366. jQuery('#ec_image_' + model_number + "_" + image_number + "_" + image_index ).show();
  367. jQuery('#ec_image_quick_view_' + model_number + "_" + image_number + "_" + image_index ).show();
  368. }
  369. // Update the swatch image classes
  370. function ec_update_swatch_images( level, num ){
  371. // Only change the swatch if someone clicked a swatch that is in stock
  372. if( document.getElementById( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + num ) )
  373. element_name = 'ec_swatch_quick_view_' + model_number + "_" + level + "_";
  374. else
  375. element_name = 'ec_swatch_' + model_number + "_" + level + "_";
  376. // Only update a swatch image if it isn't out of stock!
  377. if(this.document.getElementById( element_name + num ).className != "ec_product_swatch_out_of_stock" ){
  378. var i=0;
  379. element_name_temp = element_name + i;
  380. while( document.getElementById( element_name_temp ) ){
  381. //Don't touch out of stock swatches
  382. if( document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + i ) &&
  383. document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + i ).className != "ec_product_swatch_out_of_stock" ){
  384. ec_set_element_class_name( 'ec_swatch_' + model_number + "_" + level + "_" + i, "ec_product_swatch" );
  385. }
  386. if( document.getElementById( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + i ) &&
  387. document.getElementById( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + i ).className != "ec_product_swatch_out_of_stock" ){
  388. ec_set_element_class_name( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + i, "ec_product_swatch" );
  389. }
  390. i++;
  391. element_name_temp = element_name + i;
  392. }
  393. ec_set_element_class_name( 'ec_swatch_' + model_number + "_" + level + "_" + num, "ec_product_swatch_selected" );
  394. ec_set_element_class_name( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + num, "ec_product_swatch_selected" );
  395. }
  396. }
  397. // Update the next option level
  398. function ec_update_next_option_level( level, num ){
  399. if( ec_uses_stock_quantities( model_number ) ){
  400. // Check for a resetting combo box, manage the quantity values different for this.
  401. if( ec_is_combo_box( level ) && num == 0 ){
  402. // Reset this combo box, lets revert the quantities
  403. selected_option_quantity = get_stock_amount( level-1, get_selected_option_index( level-1 ) );
  404. if( document.getElementById( 'in_stock_amount_text_' + model_number ) )
  405. document.getElementById( 'in_stock_amount_text_' + model_number ).innerHTML = selected_option_quantity;
  406. else if( document.getElementById( 'in_stock_amount_text' ) )
  407. document.getElementById( 'in_stock_amount_text' ).innerHTML = selected_option_quantity;
  408. if( document.getElementById( 'quantity_' + model_number ) )
  409. document.getElementById( 'quantity_' + model_number ).value = selected_option_quantity;
  410. }else{
  411. // We are moving forward, update quantities and options
  412. selected_option_quantity = get_stock_amount( level, num );
  413. if( document.getElementById( 'in_stock_amount_text_' + model_number ) )
  414. document.getElementById( 'in_stock_amount_text_' + model_number ).innerHTML = selected_option_quantity;
  415. else if( document.getElementById( 'in_stock_amount_text' ) )
  416. document.getElementById( 'in_stock_amount_text' ).innerHTML = selected_option_quantity;
  417. if( document.getElementById( 'quantity_' + model_number ) )
  418. document.getElementById( 'quantity_' + model_number ).value = selected_option_quantity;
  419. }
  420. if( Number(level) < 5 ){
  421. level = Number(level)+1;
  422. if( ec_is_swatch_set( level ) ) ec_set_swatches_by_stock_quantities( level );
  423. else if( ec_is_combo_box( level ) ) ec_set_combo_by_stock_quantities( level );
  424. }
  425. while( level < 5 ){
  426. level++;
  427. if( ec_is_swatch_set( level ) ) ec_clear_swatch_set( level );
  428. else if( ec_is_combo_box( level ) ) ec_clear_combo_box( level );
  429. }
  430. }
  431. }
  432. // Update swatches in the NEXT level based on quantities
  433. function ec_set_swatches_by_stock_quantities( level ){
  434. //If this level has swatches, update the swatches to match stock quantities
  435. if( document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_0' ) ){
  436. var i=0;
  437. while( document.getElementById('ec_swatch_' + model_number + '_' + level + '_' + i ) ){
  438. if( level != 1 )
  439. document.getElementById('ec_option' + level + "_" + model_number).value = 0;
  440. if( level == 1 && i == document.getElementById( 'initial_swatch_selected_' + model_number ).value ){
  441. if( document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_' + i ) )
  442. document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_' + i ).className = "ec_product_swatch_selected";
  443. selected_option_quantity = get_stock_amount(level, i);
  444. if( document.getElementById('in_stock_amount_text') )
  445. document.getElementById('in_stock_amount_text').innerHTML = selected_option_quantity;
  446. }else if( ec_is_in_stock( level, i ) ){
  447. if( document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_' + i ) )
  448. document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_' + i ).className = "ec_product_swatch";
  449. }else{
  450. if( document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_' + i ) )
  451. document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_' + i ).className = "ec_product_swatch_out_of_stock";
  452. }
  453. i++;
  454. }
  455. }else if( document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_0' ) ){
  456. var i=0;
  457. while( document.getElementById('ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ) ){
  458. if( level == 1 && i == document.getElementById( 'initial_swatch_selected_' + model_number ).value ){
  459. if( document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ) )
  460. document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ).className = "ec_product_swatch_selected";
  461. selected_option_quantity = get_stock_amount(level, i);
  462. if( document.getElementById('in_stock_amount_text') )
  463. document.getElementById('in_stock_amount_text').innerHTML = selected_option_quantity;
  464. }else if( ec_is_in_stock( level, i ) ){
  465. if( document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ) )
  466. document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ).className = "ec_product_swatch";
  467. }else{
  468. if( document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ) )
  469. document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_' + i ).className = "ec_product_swatch_out_of_stock";
  470. }
  471. i++;
  472. }
  473. }
  474. }
  475. // Update combo in the NEXT level based on quantities
  476. function ec_set_combo_by_stock_quantities( level ){
  477. //If this level has swatches, update the swatches to match stock quantities
  478. if(level > 1 && get_selected_option_index(level-1) == -1){
  479. document.getElementById('ec_option' + level + "_" + model_number).disabled = "disabled";
  480. document.getElementById('ec_option' + level + "_" + model_number).selectedIndex = 0;
  481. }else{
  482. document.getElementById('ec_option' + level + "_" + model_number).disabled = "";
  483. document.getElementById('ec_option' + level + "_" + model_number).selectedIndex = 0;
  484. //Hide or show items
  485. for(var i=1; i<document.getElementById('ec_option'+level+"_"+model_number).options.length; i++){
  486. if(get_stock_amount(level, i) > 0){
  487. jQuery("#ec_option"+level+"_"+model_number+" option[value=" + document.getElementById('ec_option'+level+"_"+model_number).options[i].value + "]").show();
  488. }else{
  489. jQuery("#ec_option"+level+"_"+model_number+" option[value=" + document.getElementById('ec_option'+level+"_"+model_number).options[i].value + "]").hide();
  490. }
  491. }
  492. }
  493. }
  494. // Clear a swatch set
  495. function ec_clear_swatch_set( set_num ){
  496. if(document.getElementById( 'ec_swatch_' + model_number + '_' + set_num + '_0' ) ){
  497. var i=0;
  498. while( document.getElementById('ec_swatch_' + model_number + '_' + set_num + '_' + i ) ){
  499. document.getElementById( 'ec_swatch_' + model_number + '_' + set_num + '_' + i ).className = "ec_product_swatch_out_of_stock";
  500. document.getElementById( 'ec_swatch_quick_view' + model_number + '_' + set_num + '_' + i ).className = "ec_product_swatch_out_of_stock";
  501. i++;
  502. }
  503. document.getElementById( 'ec_option' + set_num + "_" + model_number ).value = 0;
  504. }
  505. }
  506. // Get an option's specific stock quantity
  507. function get_stock_amount( level, num ){
  508. if( num == -1 )
  509. num = 0;
  510. // Get the quantity string off of the element
  511. var quantity_string = "";
  512. if( ec_is_swatch_set( level ) && document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + num ) )
  513. quantity_string = document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + num ).getAttribute("data-quantitystring");
  514. else if( ec_is_swatch_set( level ) && document.getElementById( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + num ) )
  515. quantity_string = document.getElementById( 'ec_swatch_quick_view_' + model_number + "_" + level + "_" + num ).getAttribute("data-quantitystring");
  516. else if( ec_is_combo_box( level ) && document.getElementById( 'ec_option' + level + "_" + model_number ) )
  517. quantity_string = document.getElementById( 'ec_option' + level + "_" + model_number ).options[num].getAttribute('data-quantitystring');
  518. else if( ec_is_combo_box( level ) && document.getElementById( 'ec_option' + level + "_quick_view_" + model_number ) )
  519. quantity_string = document.getElementById( 'ec_option' + level + "_quick_view_" + model_number ).options[num].getAttribute('data-quantitystring');
  520. else return -1;
  521. // If level 1, that is the value, otherwise we need to split and find the quantity value.
  522. if(level == 1){
  523. return Number(quantity_string);
  524. }else{
  525. // Get the selected values so far
  526. var quantity_split_string = quantity_string.split(",");
  527. var option1_index = Number(get_selected_option_index(1));
  528. var option2_index = Number(get_selected_option_index(2));
  529. var option3_index = Number(get_selected_option_index(3));
  530. var option4_index = Number(get_selected_option_index(4));
  531. var option5_index = Number(get_selected_option_index(5));
  532. var quantity_id = 0;
  533. // Use the selected index values to decide the correct index of our quantity string split
  534. if(option1_index != -1 && level == 2)
  535. quantity_id = option1_index;
  536. else if(option2_index != -1 && level == 3)
  537. quantity_id = ( option1_index * get_num_options(2) ) + option2_index;
  538. else if(option3_index != -1 && level == 4)
  539. quantity_id = ( option1_index * get_num_options(2) * get_num_options(3) ) + ( option2_index * get_num_options(3) ) + option3_index;
  540. else if(option4_index != -1 && level == 5)
  541. quantity_id = ( option1_index * get_num_options(2) * get_num_options(3) * get_num_options(4) ) + ( option2_index * get_num_options(3) * get_num_options(4) ) + ( option3_index * get_num_options(4) ) + option4_index;
  542. // Return the correct quantity value.
  543. return Number(quantity_split_string[quantity_id]);
  544. }
  545. }
  546. // Get the number of options at this level for other calculations
  547. function get_num_options( level ){
  548. if( ec_is_swatch_set( level ) ){
  549. var i = 0;
  550. while( document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + i )){
  551. i++;
  552. }
  553. return i;
  554. }else if( ec_is_combo_box( level ) ){
  555. return Number( document.getElementById('ec_option' + level + "_" + model_number).options.length ) - 1;
  556. }else{
  557. return 0;
  558. }
  559. }
  560. // Get the selected optionitem index for an option level
  561. function get_selected_option_index( level ){
  562. if(document.getElementById('ec_option' + level + "_" + model_number)){
  563. if( ec_is_swatch_set( level ) ){
  564. var i=0;
  565. while( document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + i ) ){
  566. if( document.getElementById( 'ec_swatch_' + model_number + "_" + level + "_" + i ).className == "ec_product_swatch_selected" ){
  567. return i;
  568. }
  569. i++;
  570. }
  571. return -1;
  572. }else if( ec_is_combo_box( level ) ){
  573. return ( Number( document.getElementById( 'ec_option' + level + "_" + model_number ).selectedIndex ) - 1 );
  574. }else{
  575. return -1;
  576. }
  577. }else{
  578. return -1;
  579. }
  580. }
  581. ///////////// END OPTION FUNCTIONS /////////////////////////
  582. ///////////// CUSTOMER REVIEW FUNCTIONS /////////////////////////
  583. // Open Customer Review Panel
  584. function product_details_customer_review_open( ){
  585. jQuery( '#customer_review_popup_background' ).fadeIn( 500 );
  586. jQuery( '#customer_review_popup_box' ).fadeIn( 500 );
  587. }//close product_details_customer_review_open
  588. // Close Customer Review Panel
  589. function product_details_customer_review_close( ){
  590. jQuery( '#customer_review_popup_background' ).fadeOut( 500 );
  591. jQuery( '#customer_review_popup_box' ).fadeOut( 500 );
  592. }//close product_details_customer_review_close
  593. // On star hover
  594. function ec_customer_review_star_hover( rating ){
  595. ec_customer_review_star_set_to_value(rating);
  596. }
  597. // On star rollout
  598. function ec_customer_review_star_rollout( rating ){
  599. ec_customer_review_star_set_to_value(current_rating);
  600. }
  601. // On star click
  602. function ec_customer_review_star_click( rating ){
  603. current_rating = rating;
  604. document.getElementById('ec_customer_review_rating').value = rating+1;
  605. ec_customer_review_star_set_to_value(rating);
  606. }
  607. // Set the value of the review based on the selected value
  608. function ec_customer_review_star_set_to_value( rating ){
  609. rating++;
  610. for(var i=0; i<rating; i++){
  611. ec_set_element_class_name( 'ec_customer_review_star_' + i, "ec_customer_review_star_on" );
  612. }
  613. for(var j=rating; j<5; j++){
  614. ec_set_element_class_name( 'ec_customer_review_star_' + j, "ec_customer_review_star_off" );
  615. }
  616. }
  617. // Disable the customer review button by hiding and showing a non-button
  618. function disable_review_button(){
  619. document.getElementById('ec_open_review_button').style.display = "none";
  620. document.getElementById('ec_open_review_button_submitted').style.display = "block";
  621. }
  622. // Reset the customer review form
  623. function product_details_customer_review_reset_form(){
  624. //reset rating and stars
  625. document.getElementById('ec_customer_review_star_0').className = "ec_customer_review_star_off";
  626. document.getElementById('ec_customer_review_star_1').className = "ec_customer_review_star_off";
  627. document.getElementById('ec_customer_review_star_2').className = "ec_customer_review_star_off";
  628. document.getElementById('ec_customer_review_star_3').className = "ec_customer_review_star_off";
  629. document.getElementById('ec_customer_review_star_4').className = "ec_customer_review_star_off";
  630. document.getElementById('ec_customer_review_rating').value = 0;
  631. //reset title and description
  632. document.getElementById('ec_customer_review_title').value = "";
  633. document.getElementById('ec_customer_review_description').value = "";
  634. }
  635. ///////////// END CUSTOMER REVIEW FUNCTIONS //////////////////////
  636. ///////////// HELPER FUNCTIONS //////////////////////////////////
  637. function ec_update_product_details_images( image_index, image_number ){
  638. var i=0;
  639. var j=1;
  640. while( document.getElementById( 'ec_image_' + model_number + "_" + 1 + "_" + i ) ){
  641. j=1;
  642. while( document.getElementById( 'ec_image_' + model_number + "_" + j + "_" + i ) ){
  643. jQuery('#ec_image_' + model_number + "_" + j + "_" + i ).hide();
  644. jQuery('#ec_thumb_' + model_number + "_" + j + "_" + i ).hide();
  645. j++;
  646. }
  647. j=1;
  648. while( document.getElementById( 'ec_image_quick_view_' + model_number + "_" + j + "_" + i ) ){
  649. jQuery('#ec_image_quick_view_' + model_number + "_" + j + "_" + i ).hide();
  650. jQuery('#ec_thumb_quick_view_' + model_number + "_" + j + "_" + i ).hide();
  651. j++;
  652. }
  653. i++;
  654. }
  655. jQuery( '#ec_image_' + model_number + "_" + 1 + "_" + image_index ).show();
  656. jQuery( '#ec_image_quick_view_' + model_number + "_" + 1 + "_" + image_index ).show();
  657. if( document.getElementById( 'ec_thumb_' + model_number + '_' + 1 + '_' + image_index ) )
  658. jQuery('#ec_thumb_' + model_number + "_" + 1 + "_" + image_index ).show();
  659. if( document.getElementById( 'ec_thumb_' + model_number + '_' + 2 + '_' + image_index ) )
  660. jQuery('#ec_thumb_' + model_number + "_" + 2 + "_" + image_index ).show();
  661. if( document.getElementById( 'ec_thumb_' + model_number + '_' + 3 + '_' + image_index ) )
  662. jQuery('#ec_thumb_' + model_number + "_" + 3 + "_" + image_index ).show();
  663. if( document.getElementById( 'ec_thumb_' + model_number + '_' + 4 + '_' + image_index ) )
  664. jQuery('#ec_thumb_' + model_number + "_" + 4 + "_" + image_index ).show();
  665. if( document.getElementById( 'ec_thumb_' + model_number + '_' + 5 + '_' + image_index ) )
  666. jQuery('#ec_thumb_' + model_number + "_" + 5 + "_" + image_index ).show();
  667. if( document.getElementById( 'ec_thumb_quick_view_' + model_number + '_' + 1 + '_' + image_index ) )
  668. jQuery('#ec_thumb_quick_view_' + model_number + "_" + 1 + "_" + image_index ).show();
  669. if( document.getElementById( 'ec_thumb_quick_view_' + model_number + '_' + 2 + '_' + image_index ) )
  670. jQuery('#ec_thumb_quick_view_' + model_number + "_" + 2 + "_" + image_index ).show();
  671. if( document.getElementById( 'ec_thumb_quick_view_' + model_number + '_' + 3 + '_' + image_index ) )
  672. jQuery('#ec_thumb_quick_view_' + model_number + "_" + 3 + "_" + image_index ).show();
  673. if( document.getElementById( 'ec_thumb_quick_view_' + model_number + '_' + 4 + '_' + image_index ) )
  674. jQuery('#ec_thumb_quick_view_' + model_number + "_" + 4 + "_" + image_index ).show();
  675. if( document.getElementById( 'ec_thumb_quick_view_' + model_number + '_' + 5 + '_' + image_index ) )
  676. jQuery('#ec_thumb_quick_view_' + model_number + "_" + 5 + "_" + image_index ).show();
  677. }
  678. function ec_set_element_class_name( element_name, class_name ){
  679. if( document.getElementById( element_name ) )
  680. document.getElementById( element_name ).className = class_name;
  681. }
  682. ///////////////// QUICK IS OR USES CHECKS ///////////////////
  683. function ec_uses_stock_quantities( ){
  684. if( document.getElementById( 'use_optionitem_quantity_tracking_' + model_number ) &&
  685. document.getElementById( 'use_optionitem_quantity_tracking_' + model_number ).value == "1" ) return true;
  686. else return false;
  687. }
  688. function ec_uses_optionitem_images( ){
  689. if( document.getElementById( 'use_optionitem_images_' + model_number ).value == 1 ) return true;
  690. else return false;
  691. }
  692. function ec_is_swatch_set( level ){
  693. if( document.getElementById( 'ec_swatch_' + model_number + '_' + level + '_0' ) )
  694. return true;
  695. else if( document.getElementById( 'ec_swatch_quick_view_' + model_number + '_' + level + '_0' ) )
  696. return true;
  697. else return false;
  698. }
  699. function ec_is_combo_box( level ){
  700. if( !ec_is_swatch_set( level ) &&
  701. document.getElementById( 'ec_option' + level + "_" + model_number ) &&
  702. document.getElementById( 'ec_option' + level + "_" + model_number ).options &&
  703. document.getElementById( 'ec_option' + level + "_" + model_number ).options.length > 1 )
  704. return true;
  705. else if( !ec_is_swatch_set( level ) &&
  706. document.getElementById( 'ec_option' + level + "_quick_view_" + model_number ) &&
  707. document.getElementById( 'ec_option' + level + "_quick_view_" + model_number ).options &&
  708. document.getElementById( 'ec_option' + level + "_quick_view_" + model_number ).options.length > 1 )
  709. return true;
  710. else return false;
  711. }
  712. function ec_is_in_stock( level, num ){
  713. if( get_stock_amount( level, num ) ) return true;
  714. else return false;
  715. }
  716. function ec_clear_combo_box( set_num ){
  717. if(document.getElementById( 'ec_option' + set_num + "_" + model_number )){
  718. document.getElementById( 'ec_option' + set_num + "_" + model_number ).selectedIndex = 0;
  719. document.getElementById( 'ec_option' + set_num + "_" + model_number ).disabled = "disabled";
  720. }
  721. }
  722. ////////// FORM SUBMISSION FUNCTIONS /////////////////////
  723. // Submit the customer review form
  724. function submit_customer_review(){
  725. var errors=0;
  726. if(document.getElementById('ec_customer_review_rating').value == 0){
  727. errors++;
  728. document.getElementById('ec_customer_review_rating_error').style.display = 'block';
  729. }else{
  730. document.getElementById('ec_customer_review_rating_error').style.display = 'none';
  731. }
  732. if(document.getElementById('ec_customer_review_title').value.length == 0){
  733. errors++;
  734. document.getElementById('ec_product_details_customer_reviews_popup_label_title').className = 'ec_product_details_customer_reviews_popup_label_row_error';
  735. }else{
  736. document.getElementById('ec_product_details_customer_reviews_popup_label_title').className = 'ec_product_details_customer_reviews_popup_label_row';
  737. }
  738. if(document.getElementById('ec_customer_review_description').value.length == 0){
  739. errors++;
  740. document.getElementById('ec_product_details_customer_reviews_popup_label_description').className = 'ec_product_details_customer_reviews_popup_label_row_error';
  741. }else{
  742. document.getElementById('ec_product_details_customer_reviews_popup_label_description').className = 'ec_product_details_customer_reviews_popup_label_row';
  743. }
  744. if(errors == 0){
  745. jQuery('#ec_customer_review_loader').fadeIn(100);
  746. var data = {
  747. action: 'ec_ajax_insert_customer_review',
  748. product_id: document.getElementById('product_id').value,
  749. rating: document.getElementById('ec_customer_review_rating').value,
  750. title: document.getElementById('ec_customer_review_title').value,
  751. description: document.getElementById('ec_customer_review_description').value
  752. };
  753. jQuery.ajax({url: ajax_object.ajax_url, type: 'post', data: data, success: function(data){ jQuery('#ec_customer_review_loader').fadeOut(100); product_details_customer_review_close(); product_details_customer_review_reset_form(); disable_review_button(); } } );
  754. }
  755. return false;
  756. }
  757. // Add to cart function
  758. function ec_product_details_add_to_cart( modelnum ){
  759. model_number = modelnum;
  760. var errors = 0;
  761. if( document.getElementById( 'ec_option1_' + model_number ) ){
  762. if( document.getElementById( 'ec_option1_' + model_number ).value == "0" ){
  763. if( ec_is_combo_box( 1 ) ) document.getElementById( 'ec_option1_' + model_number ).className = "ec_product_details_option_combo_error";
  764. else ec_show_swatch_error( 1 );
  765. errors++;
  766. }else{
  767. if( ec_is_combo_box( 1 ) ) document.getElementById( 'ec_option1_' + model_number ).className = "ec_product_details_option_combo";
  768. else ec_hide_swatch_error( 1 );
  769. }
  770. }
  771. if( document.getElementById( 'ec_option2_' + model_number ) ){
  772. if( document.getElementById( 'ec_option2_' + model_number ).value == "0"){
  773. if( ec_is_combo_box( 2 ) ) document.getElementById( 'ec_option2_' + model_number ).className = "ec_product_details_option_combo_error";
  774. else ec_show_swatch_error( 2 );
  775. errors++;
  776. }else{
  777. if( ec_is_combo_box( 2 ) ) document.getElementById( 'ec_option2_' + model_number ).className = "ec_product_details_option_combo";
  778. else ec_hide_swatch_error( 2 );
  779. }
  780. }
  781. if( document.getElementById( 'ec_option3_' + model_number ) ){
  782. if( document.getElementById( 'ec_option3_' + model_number ).value == "0"){
  783. if( ec_is_combo_box( 3 ) ) document.getElementById( 'ec_option3_' + model_number ).className = "ec_product_details_option_combo_error";
  784. else ec_show_swatch_error( 3 );
  785. errors++;
  786. }else{
  787. if( ec_is_combo_box( 3 ) ) document.getElementById( 'ec_option3_' + model_number ).className = "ec_product_details_option_combo";
  788. else ec_hide_swatch_error( 3 );
  789. }
  790. }
  791. if( document.getElementById( 'ec_option4_' + model_number ) ){
  792. if( document.getElementById( 'ec_option4_' + model_number ).value == "0"){
  793. if( ec_is_combo_box( 4 ) ) document.getElementById( 'ec_option4_' + model_number ).className = "ec_product_details_option_combo_error";
  794. else ec_show_swatch_error( 4 );
  795. errors++;
  796. }else{
  797. if( ec_is_combo_box( 4 ) ) document.getElementById( 'ec_option4_' + model_number ).className = "ec_product_details_option_combo";
  798. else ec_hide_swatch_error( 4 );
  799. }
  800. }
  801. if( document.getElementById( 'ec_option5_' + model_number ) ){
  802. if( document.getElementById( 'ec_option5_' + model_number ).value == "0"){
  803. if( ec_is_combo_box( 5 ) ) document.getElementById( 'ec_option5_' + model_number ).className = "ec_product_details_option_combo_error";
  804. else ec_show_swatch_error( 5 );
  805. errors++;
  806. }else{
  807. if( ec_is_combo_box( 5 ) ) document.getElementById( 'ec_option5_' + model_number ).className = "ec_product_details_option_combo";
  808. else ec_hide_swatch_error( 5 );
  809. }
  810. }
  811. if( document.getElementById( 'is_donation_' + model_number ) && document.getElementById( 'is_donation_' + model_number ).value == "1" ){
  812. var donation_amount = document.getElementById( 'ec_product_input_price' ).value;
  813. var min_amount = document.getElementById( 'ec_product_min_donation_amount' ).value;
  814. if( isNaN( donation_amount ) || Number( donation_amount ) < min_amount ){
  815. document.getElementById('ec_product_details_donation_row').className = "ec_product_details_donation_error";
  816. errors++;
  817. }else{
  818. document.getElementById('ec_product_details_donation_row').className = "ec_product_details_donation";
  819. }
  820. }else{
  821. if( ( ec_track_basic_quantity( model_number ) && !ec_check_basic_quantity( model_number ) ) || !ec_has_valid_quantity( model_number, selected_option_quantity ) ){
  822. document.getElementById( 'ec_product_details_quantity_' + model_number ).className = "ec_product_details_quantity_error";
  823. errors++;
  824. }else{
  825. document.getElementById( 'ec_product_details_quantity_' + model_number ).className = "ec_product_details_quantity";
  826. }
  827. }
  828. if( document.getElementById( 'ec_gift_card_message_' + model_number ) && document.getElementById( 'ec_gift_card_message_' + model_number ).value.length == 0 ){
  829. document.getElementById( 'ec_gift_card_message_' + model_number ).className = "ec_gift_card_message_error";
  830. errors++;
  831. }else if( document.getElementById( 'ec_gift_card_message_' + model_number ) ){
  832. document.getElementById( 'ec_gift_card_message_' + model_number ).className = "ec_gift_card_message";
  833. }
  834. if( document.getElementById( 'ec_gift_card_to_name_' + model_number ) && document.getElementById( 'ec_gift_card_to_name_' + model_number ).value.length == 0 ){
  835. document.getElementById( 'ec_gift_card_to_name_' + model_number ).className = "ec_gift_card_to_name_error";
  836. errors++;
  837. }else if( document.getElementById( 'ec_gift_card_to_name_' + model_number ) ){
  838. document.getElementById( 'ec_gift_card_to_name_' + model_number ).className = "ec_gift_card_to_name";
  839. }
  840. if( document.getElementById( 'ec_gift_card_from_name_' + model_number ) && document.getElementById( 'ec_gift_card_from_name_' + model_number ).value.length == 0 ){
  841. document.getElementById( 'ec_gift_card_from_name_' + model_number ).className = "ec_gift_card_from_name_error";
  842. errors++;
  843. }else if( document.getElementById( 'ec_gift_card_from_name_' + model_number ) ){
  844. document.getElementById( 'ec_gift_card_from_name_' + model_number ).className = "ec_gift_card_from_name";
  845. }
  846. if(errors == 0)
  847. return true;
  848. else
  849. return false;
  850. }
  851. function ec_product_details_add_to_cart_advanced( model_number ){
  852. var i=0;
  853. var errors=0;
  854. while( document.getElementById( 'ec_option' + i + '_' + model_number ) || document.getElementById( 'ec_option' + i + '_' + model_number + '_0' ) ){
  855. if( document.getElementById( 'ec_option' + i + '_' + model_number ) ){
  856. if( document.getElementById( 'ec_option' + i + '_' + model_number ).value <= 0 && document.getElementById( 'ec_option' + i + '_' + model_number ).getAttribute( "data-ec-required" ) == '1' ){
  857. document.getElementById( 'ec_option' + i + '_' + model_number + "_error" ).style.display = "block";
  858. errors++;
  859. }else{
  860. document.getElementById( 'ec_option' + i + '_' + model_number + "_error" ).style.display = "none";
  861. }
  862. }else{
  863. var input_type = jQuery( '#ec_option' + i + '_' + model_number + "_0" ).attr("type").toLowerCase();
  864. if( input_type == "checkbox" ){
  865. var j=0;
  866. var selected = 0;
  867. while( document.getElementById( 'ec_option' + i + '_' + model_number + '_' + j ) ){
  868. if( jQuery( '#ec_option' + i + '_' + model_number + "_" + j ).prop("checked") ){
  869. selected++;
  870. }
  871. j++;
  872. }
  873. if( selected <= 0 && document.getElementById( 'ec_option' + i + '_' + model_number + '_0' ).getAttribute( "data-ec-required" ) == '1' ){
  874. document.getElementById( 'ec_option' + i + '_' + model_number + "_error" ).style.display = "block";
  875. errors++;
  876. }else{
  877. document.getElementById( 'ec_option' + i + '_' + model_number + "_error" ).style.display = "none";
  878. }
  879. }else if( input_type == "radio" ){
  880. var j=0;
  881. var selected = 0;
  882. while( document.getElementById( 'ec_option' + i + '_' + model_number + '_' + j ) ){
  883. if( jQuery( '#ec_option' + i + '_' + model_number + "_" + j ).prop("checked") ){
  884. selected++;
  885. }
  886. j++;
  887. }
  888. if( selected <= 0 && document.getElementById( 'ec_option' + i + '_' + model_number + '_0' ).getAttribute( "data-ec-required" ) == '1' ){
  889. document.getElementById( 'ec_option' + i + '_' + model_number + "_error" ).style.display = "block";
  890. errors++;
  891. }else{
  892. document.getElementById( 'ec_option' + i + '_' + model_number + "_error" ).style.display = "none";
  893. }
  894. }else if( input_type == "number" ){
  895. var j=0;
  896. var total=0;
  897. while( document.getElementById( 'ec_option' + i + '_' + model_number + '_' + j ) ){
  898. total = total + Number( jQuery( '#ec_option' + i + '_' + model_number + "_" + j ).val( ) );
  899. j++;
  900. }
  901. if( total <= 0 && document.getEleme

Large files files are truncated, but you can click here to view the full file